Got RelaxedPrecision decorations working again in SPIR-V, and removed
no-longer-needed old-style precision handling code.

Bug: skia:8829
Change-Id: I72fc2ee2a305c9c72a3efa92dd44d18239eabaf2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/198169
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/include/private/GrTypesPriv.h b/include/private/GrTypesPriv.h
index d6ea362..9e2d3a2 100644
--- a/include/private/GrTypesPriv.h
+++ b/include/private/GrTypesPriv.h
@@ -640,110 +640,6 @@
     return false;
 }
 
-static inline bool GrSLTypeAcceptsPrecision(GrSLType type) {
-    switch (type) {
-        case kTexture2DSampler_GrSLType:
-        case kTextureExternalSampler_GrSLType:
-        case kTexture2DRectSampler_GrSLType:
-            return true;
-
-        case kVoid_GrSLType:
-        case kBool_GrSLType:
-        case kByte_GrSLType:
-        case kByte2_GrSLType:
-        case kByte3_GrSLType:
-        case kByte4_GrSLType:
-        case kUByte_GrSLType:
-        case kUByte2_GrSLType:
-        case kUByte3_GrSLType:
-        case kUByte4_GrSLType:
-        case kShort_GrSLType:
-        case kShort2_GrSLType:
-        case kShort3_GrSLType:
-        case kShort4_GrSLType:
-        case kUShort_GrSLType:
-        case kUShort2_GrSLType:
-        case kUShort3_GrSLType:
-        case kUShort4_GrSLType:
-        case kFloat_GrSLType:
-        case kFloat2_GrSLType:
-        case kFloat3_GrSLType:
-        case kFloat4_GrSLType:
-        case kFloat2x2_GrSLType:
-        case kFloat3x3_GrSLType:
-        case kFloat4x4_GrSLType:
-        case kHalf_GrSLType:
-        case kHalf2_GrSLType:
-        case kHalf3_GrSLType:
-        case kHalf4_GrSLType:
-        case kHalf2x2_GrSLType:
-        case kHalf3x3_GrSLType:
-        case kHalf4x4_GrSLType:
-        case kInt_GrSLType:
-        case kInt2_GrSLType:
-        case kInt3_GrSLType:
-        case kInt4_GrSLType:
-        case kUint_GrSLType:
-        case kUint2_GrSLType:
-            return false;
-    }
-    SK_ABORT("Unexpected type");
-    return false;
-}
-
-// temporarily accepting (but ignoring) precision modifiers on the new types; this will be killed
-// in a future CL
-static inline bool GrSLTypeTemporarilyAcceptsPrecision(GrSLType type) {
-    switch (type) {
-        case kShort_GrSLType:
-        case kUShort_GrSLType:
-        case kFloat_GrSLType:
-        case kFloat2_GrSLType:
-        case kFloat3_GrSLType:
-        case kFloat4_GrSLType:
-        case kFloat2x2_GrSLType:
-        case kFloat3x3_GrSLType:
-        case kFloat4x4_GrSLType:
-        case kHalf_GrSLType:
-        case kHalf2_GrSLType:
-        case kHalf3_GrSLType:
-        case kHalf4_GrSLType:
-        case kHalf2x2_GrSLType:
-        case kHalf3x3_GrSLType:
-        case kHalf4x4_GrSLType:
-        case kInt_GrSLType:
-        case kInt2_GrSLType:
-        case kInt3_GrSLType:
-        case kInt4_GrSLType:
-        case kUint_GrSLType:
-        case kUint2_GrSLType:
-        case kTexture2DSampler_GrSLType:
-        case kTextureExternalSampler_GrSLType:
-        case kTexture2DRectSampler_GrSLType:
-            return true;
-
-        case kVoid_GrSLType:
-        case kBool_GrSLType:
-        case kByte_GrSLType:
-        case kByte2_GrSLType:
-        case kByte3_GrSLType:
-        case kByte4_GrSLType:
-        case kUByte_GrSLType:
-        case kUByte2_GrSLType:
-        case kUByte3_GrSLType:
-        case kUByte4_GrSLType:
-        case kShort2_GrSLType:
-        case kShort3_GrSLType:
-        case kShort4_GrSLType:
-        case kUShort2_GrSLType:
-        case kUShort3_GrSLType:
-        case kUShort4_GrSLType:
-            return false;
-    }
-    SK_ABORT("Unexpected type");
-    return false;
-}
-
 //////////////////////////////////////////////////////////////////////////////
 
 /**
diff --git a/src/core/SkNormalMapSource.cpp b/src/core/SkNormalMapSource.cpp
index ef857f3..ed5598e 100644
--- a/src/core/SkNormalMapSource.cpp
+++ b/src/core/SkNormalMapSource.cpp
@@ -47,7 +47,7 @@
             // add uniform
             const char* xformUniName = nullptr;
             fXformUni = uniformHandler->addUniform(kFragment_GrShaderFlag, kFloat2x2_GrSLType,
-                                                   kDefault_GrSLPrecision, "Xform", &xformUniName);
+                                                   "Xform", &xformUniName);
 
             SkString dstNormalColorName("dstNormalColor");
             this->emitChild(0, &dstNormalColorName, args);
diff --git a/src/gpu/GrShaderVar.cpp b/src/gpu/GrShaderVar.cpp
index 65c7d90..269ba83 100644
--- a/src/gpu/GrShaderVar.cpp
+++ b/src/gpu/GrShaderVar.cpp
@@ -35,25 +35,7 @@
     SK_ABORT("Unknown io type.");
 }
 
-// Converts a GrSLPrecision to its corresponding GLSL precision qualifier. TODO: Remove this as we
-// shouldn't need it with SkSL.
-static inline const char* glsl_precision_string(GrSLPrecision p) {
-    switch (p) {
-        case kLow_GrSLPrecision:
-            return "lowp";
-        case kMedium_GrSLPrecision:
-            return "mediump";
-        case kHigh_GrSLPrecision:
-            return "highp";
-        case kDefault_GrSLPrecision:
-            return "";
-    }
-    SK_ABORT("Unexpected precision type.");
-    return "";
-}
-
 void GrShaderVar::appendDecl(const GrShaderCaps* shaderCaps, SkString* out) const {
-    SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeTemporarilyAcceptsPrecision(fType));
     SkString layout = fLayoutQualifier;
     if (!fLayoutQualifier.isEmpty()) {
         out->appendf("layout(%s) ", fLayoutQualifier.c_str());
@@ -64,10 +46,6 @@
         out->append(" ");
     }
     GrSLType effectiveType = this->getType();
-    if (shaderCaps->usesPrecisionModifiers() && GrSLTypeAcceptsPrecision(effectiveType)) {
-        // Desktop GLSL has added precision qualifiers but they don't do anything.
-        out->appendf("%s ", glsl_precision_string(fPrecision));
-    }
     if (this->isArray()) {
         if (this->isUnsizedArray()) {
             out->appendf("%s %s[]", GrGLSLTypeString(effectiveType), this->getName().c_str());
diff --git a/src/gpu/GrShaderVar.h b/src/gpu/GrShaderVar.h
index 0f22085..ef0d830 100644
--- a/src/gpu/GrShaderVar.h
+++ b/src/gpu/GrShaderVar.h
@@ -46,47 +46,39 @@
         , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS) {
     }
 
-    GrShaderVar(const SkString& name, GrSLType type, int arrayCount = kNonArray,
-                GrSLPrecision precision = kDefault_GrSLPrecision)
+    GrShaderVar(const SkString& name, GrSLType type, int arrayCount = kNonArray)
         : fType(type)
         , fTypeModifier(kNone_TypeModifier)
         , fCount(arrayCount)
-        , fPrecision(precision)
         , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS)
         , fName(name) {
         SkASSERT(kVoid_GrSLType != type);
         fUseUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS;
     }
 
-    GrShaderVar(const char* name, GrSLType type, int arrayCount = kNonArray,
-                GrSLPrecision precision = kDefault_GrSLPrecision)
+    GrShaderVar(const char* name, GrSLType type, int arrayCount = kNonArray)
         : fType(type)
         , fTypeModifier(kNone_TypeModifier)
         , fCount(arrayCount)
-        , fPrecision(precision)
         , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS)
         , fName(name) {
         SkASSERT(kVoid_GrSLType != type);
         fUseUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS;
     }
 
-    GrShaderVar(const char* name, GrSLType type, TypeModifier typeModifier,
-                GrSLPrecision precision = kDefault_GrSLPrecision)
+    GrShaderVar(const char* name, GrSLType type, TypeModifier typeModifier)
         : fType(type)
         , fTypeModifier(typeModifier)
         , fCount(kNonArray)
-        , fPrecision(precision)
         , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS)
         , fName(name) {
         SkASSERT(kVoid_GrSLType != type);
     }
 
-    GrShaderVar(const char* name, GrSLType type, TypeModifier typeModifier,
-                int arrayCount, GrSLPrecision precision = kDefault_GrSLPrecision)
+    GrShaderVar(const char* name, GrSLType type, TypeModifier typeModifier, int arrayCount)
         : fType(type)
         , fTypeModifier(typeModifier)
         , fCount(arrayCount)
-        , fPrecision(precision)
         , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS)
         , fName(name) {
         SkASSERT(kVoid_GrSLType != type);
@@ -96,7 +88,6 @@
         : fType(that.fType)
         , fTypeModifier(that.fTypeModifier)
         , fCount(that.fCount)
-        , fPrecision(that.fPrecision)
         , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS)
         , fName(that.fName)
         , fLayoutQualifier(that.fLayoutQualifier)
@@ -110,17 +101,14 @@
     void set(GrSLType type,
              const SkString& name,
              TypeModifier typeModifier = kNone_TypeModifier,
-             GrSLPrecision precision = kDefault_GrSLPrecision,
              const char* layoutQualifier = nullptr,
              const char* extraModifiers = nullptr,
              bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
         SkASSERT(kVoid_GrSLType != type);
-        SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeTemporarilyAcceptsPrecision(type));
         fType = type;
         fTypeModifier = typeModifier;
         fName = name;
         fCount = kNonArray;
-        fPrecision = precision;
         fLayoutQualifier = layoutQualifier;
         if (extraModifiers) {
             fExtraModifiers.printf("%s ", extraModifiers);
@@ -134,17 +122,14 @@
     void set(GrSLType type,
              const char* name,
              TypeModifier typeModifier = kNone_TypeModifier,
-             GrSLPrecision precision = kDefault_GrSLPrecision,
              const char* layoutQualifier = nullptr,
              const char* extraModifiers = nullptr,
              bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
         SkASSERT(kVoid_GrSLType != type);
-        SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeTemporarilyAcceptsPrecision(type));
         fType = type;
         fTypeModifier = typeModifier;
         fName = name;
         fCount = kNonArray;
-        fPrecision = precision;
         fLayoutQualifier = layoutQualifier;
         if (extraModifiers) {
             fExtraModifiers.printf("%s ", extraModifiers);
@@ -159,17 +144,14 @@
              const SkString& name,
              int count,
              TypeModifier typeModifier,
-             GrSLPrecision precision = kDefault_GrSLPrecision,
              const char* layoutQualifier = nullptr,
              const char* extraModifiers = nullptr,
              bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
         SkASSERT(kVoid_GrSLType != type);
-        SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeTemporarilyAcceptsPrecision(type));
         fType = type;
         fTypeModifier = typeModifier;
         fName = name;
         fCount = count;
-        fPrecision = precision;
         fLayoutQualifier = layoutQualifier;
         if (extraModifiers) {
             fExtraModifiers.printf("%s ", extraModifiers);
@@ -184,17 +166,14 @@
              const char* name,
              int count,
              TypeModifier typeModifier,
-             GrSLPrecision precision = kDefault_GrSLPrecision,
              const char* layoutQualifier = nullptr,
              const char* extraModifiers = nullptr,
              bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
         SkASSERT(kVoid_GrSLType != type);
-        SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeTemporarilyAcceptsPrecision(type));
         fType = type;
         fTypeModifier = typeModifier;
         fName = name;
         fCount = count;
-        fPrecision = precision;
         fLayoutQualifier = layoutQualifier;
         if (extraModifiers) {
             fExtraModifiers.printf("%s ", extraModifiers);
@@ -260,16 +239,6 @@
     void setTypeModifier(TypeModifier type) { fTypeModifier = type; }
 
     /**
-     * Get the precision of the var
-     */
-    GrSLPrecision getPrecision() const { return fPrecision; }
-
-    /**
-     * Set the precision of the var
-     */
-    void setPrecision(GrSLPrecision p) { fPrecision = p; }
-
-    /**
      * Appends to the layout qualifier
      */
     void addLayoutQualifier(const char* layoutQualifier) {
@@ -314,7 +283,6 @@
     GrSLType        fType;
     TypeModifier    fTypeModifier;
     int             fCount;
-    GrSLPrecision   fPrecision;
     /// Work around driver bugs on some hardware that don't correctly
     /// support uniform float []
     bool            fUseUniformFloatArrays;
diff --git a/src/gpu/effects/GrAARectEffect.cpp b/src/gpu/effects/GrAARectEffect.cpp
index 2a4acf1a..649bb7c 100644
--- a/src/gpu/effects/GrAARectEffect.cpp
+++ b/src/gpu/effects/GrAARectEffect.cpp
@@ -28,7 +28,7 @@
         (void)rect;
         prevRect = float4(-1.0);
         fRectUniformVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "rectUniform");
+                kFragment_GrShaderFlag, kFloat4_GrSLType, "rectUniform");
         fragBuilder->codeAppendf(
                 "float4 prevRect = float4(%f, %f, %f, %f);\nhalf alpha;\n@switch (%d) {\n    case "
                 "0:\n    case 2:\n        alpha = half(all(greaterThan(float4(sk_FragCoord.xy, "
diff --git a/src/gpu/effects/GrAlphaThresholdFragmentProcessor.cpp b/src/gpu/effects/GrAlphaThresholdFragmentProcessor.cpp
index 0920905..a60afd2 100644
--- a/src/gpu/effects/GrAlphaThresholdFragmentProcessor.cpp
+++ b/src/gpu/effects/GrAlphaThresholdFragmentProcessor.cpp
@@ -37,10 +37,10 @@
         (void)innerThreshold;
         auto outerThreshold = _outer.outerThreshold();
         (void)outerThreshold;
-        fInnerThresholdVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kHalf_GrSLType, kDefault_GrSLPrecision, "innerThreshold");
-        fOuterThresholdVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kHalf_GrSLType, kDefault_GrSLPrecision, "outerThreshold");
+        fInnerThresholdVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                              kHalf_GrSLType, "innerThreshold");
+        fOuterThresholdVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                              kHalf_GrSLType, "outerThreshold");
         SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]);
         fragBuilder->codeAppendf(
                 "half4 color = %s;\nhalf4 mask_color = texture(%s, %s).%s;\nif (mask_color.w < "
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
index 370b0e5..1828eca 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
+++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
@@ -35,7 +35,6 @@
         const char* atlasSizeInvName;
         fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag,
                                                           kFloat2_GrSLType,
-                                                          kHigh_GrSLPrecision,
                                                           "AtlasSizeInv",
                                                           &atlasSizeInvName);
 
diff --git a/src/gpu/effects/GrCircleBlurFragmentProcessor.cpp b/src/gpu/effects/GrCircleBlurFragmentProcessor.cpp
index bce42f8..08a4535 100644
--- a/src/gpu/effects/GrCircleBlurFragmentProcessor.cpp
+++ b/src/gpu/effects/GrCircleBlurFragmentProcessor.cpp
@@ -271,7 +271,7 @@
         auto solidRadius = _outer.solidRadius();
         (void)solidRadius;
         fCircleDataVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType,
-                                                          kDefault_GrSLPrecision, "circleData");
+                                                          "circleData");
         fragBuilder->codeAppendf(
                 "half2 vec = half2(half((sk_FragCoord.x - float(%s.x)) * float(%s.w)), "
                 "half((sk_FragCoord.y - float(%s.y)) * float(%s.w)));\nhalf dist = length(vec) + "
diff --git a/src/gpu/effects/GrCircleEffect.cpp b/src/gpu/effects/GrCircleEffect.cpp
index ddc81b8..b6b05e5 100644
--- a/src/gpu/effects/GrCircleEffect.cpp
+++ b/src/gpu/effects/GrCircleEffect.cpp
@@ -29,8 +29,8 @@
         auto radius = _outer.radius();
         (void)radius;
         prevRadius = -1.0;
-        fCircleVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType,
-                                                      kDefault_GrSLPrecision, "circle");
+        fCircleVar =
+                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "circle");
         fragBuilder->codeAppendf(
                 "half2 prevCenter;\nhalf prevRadius = %f;\nhalf d;\n@if (%d == 2 || %d == 3) {\n   "
                 " d = half((length((float2(%s.xy) - sk_FragCoord.xy) * float(%s.w)) - 1.0) * "
diff --git a/src/gpu/effects/GrConstColorProcessor.cpp b/src/gpu/effects/GrConstColorProcessor.cpp
index 82ef77a..ed1ab7e 100644
--- a/src/gpu/effects/GrConstColorProcessor.cpp
+++ b/src/gpu/effects/GrConstColorProcessor.cpp
@@ -26,8 +26,8 @@
         (void)color;
         auto mode = _outer.mode();
         (void)mode;
-        fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType,
-                                                     kDefault_GrSLPrecision, "color");
+        fColorVar =
+                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "color");
         fragBuilder->codeAppendf(
                 "@switch (%d) {\n    case 0:\n        %s = %s;\n        break;\n    case 1:\n      "
                 "  %s = %s * %s;\n        break;\n    case 2:\n        %s = %s.w * %s;\n        "
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp
index 883c28c..bb4179a 100644
--- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp
+++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp
@@ -41,7 +41,6 @@
         const char* atlasSizeInvName;
         fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag,
                                                           kFloat2_GrSLType,
-                                                          kHigh_GrSLPrecision,
                                                           "AtlasSizeInv",
                                                           &atlasSizeInvName);
 #ifdef SK_GAMMA_APPLY_TO_A8
@@ -341,7 +340,6 @@
         const char* atlasSizeInvName;
         fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag,
                                                           kFloat2_GrSLType,
-                                                          kHigh_GrSLPrecision,
                                                           "AtlasSizeInv",
                                                           &atlasSizeInvName);
 
@@ -630,7 +628,6 @@
         const char* atlasSizeInvName;
         fAtlasSizeInvUniform = uniformHandler->addUniform(kVertex_GrShaderFlag,
                                                           kFloat2_GrSLType,
-                                                          kHigh_GrSLPrecision,
                                                           "AtlasSizeInv",
                                                           &atlasSizeInvName);
 
diff --git a/src/gpu/effects/GrEllipseEffect.cpp b/src/gpu/effects/GrEllipseEffect.cpp
index 7372571..b064490 100644
--- a/src/gpu/effects/GrEllipseEffect.cpp
+++ b/src/gpu/effects/GrEllipseEffect.cpp
@@ -31,10 +31,10 @@
         prevRadii = float2(-1.0);
         useScale = !sk_Caps.floatIs32Bits;
         fEllipseVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                       kDefault_GrSLPrecision, "ellipse");
+                                                       "ellipse");
         if (useScale) {
             fScaleVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat2_GrSLType,
-                                                         kDefault_GrSLPrecision, "scale");
+                                                         "scale");
         }
         fragBuilder->codeAppendf(
                 "float2 prevCenter;\nfloat2 prevRadii = float2(%f, %f);\nbool useScale = "
diff --git a/src/gpu/effects/GrMagnifierEffect.cpp b/src/gpu/effects/GrMagnifierEffect.cpp
index 8042613..4bef44d 100644
--- a/src/gpu/effects/GrMagnifierEffect.cpp
+++ b/src/gpu/effects/GrMagnifierEffect.cpp
@@ -35,17 +35,17 @@
         auto yInvInset = _outer.yInvInset();
         (void)yInvInset;
         fBoundsUniformVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "boundsUniform");
+                kFragment_GrShaderFlag, kFloat4_GrSLType, "boundsUniform");
         fXInvZoomVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "xInvZoom");
+                kFragment_GrShaderFlag, kFloat_GrSLType, "xInvZoom");
         fYInvZoomVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "yInvZoom");
+                kFragment_GrShaderFlag, kFloat_GrSLType, "yInvZoom");
         fXInvInsetVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "xInvInset");
+                kFragment_GrShaderFlag, kFloat_GrSLType, "xInvInset");
         fYInvInsetVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "yInvInset");
-        fOffsetVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kHalf2_GrSLType, kDefault_GrSLPrecision, "offset");
+                kFragment_GrShaderFlag, kFloat_GrSLType, "yInvInset");
+        fOffsetVar =
+                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf2_GrSLType, "offset");
         SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]);
         fragBuilder->codeAppendf(
                 "float2 coord = %s;\nfloat2 zoom_coord = float2(%s) + coord * float2(%s, "
diff --git a/src/gpu/effects/GrMixerEffect.cpp b/src/gpu/effects/GrMixerEffect.cpp
index 6e79f51..fb0e50e 100644
--- a/src/gpu/effects/GrMixerEffect.cpp
+++ b/src/gpu/effects/GrMixerEffect.cpp
@@ -24,8 +24,8 @@
         (void)_outer;
         auto weight = _outer.weight();
         (void)weight;
-        fWeightVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType,
-                                                      kDefault_GrSLPrecision, "weight");
+        fWeightVar =
+                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType, "weight");
         SkString _input0 = SkStringPrintf("%s", args.fInputColor);
         SkString _child0("_child0");
         this->emitChild(_outer.fp0_index(), _input0.c_str(), &_child0, args);
diff --git a/src/gpu/effects/GrRRectBlurEffect.cpp b/src/gpu/effects/GrRRectBlurEffect.cpp
index 6f1f62b..ba9d701 100644
--- a/src/gpu/effects/GrRRectBlurEffect.cpp
+++ b/src/gpu/effects/GrRRectBlurEffect.cpp
@@ -69,11 +69,11 @@
         auto cornerRadius = _outer.cornerRadius();
         (void)cornerRadius;
         fCornerRadiusVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType,
-                                                            kDefault_GrSLPrecision, "cornerRadius");
+                                                            "cornerRadius");
         fProxyRectVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                         kDefault_GrSLPrecision, "proxyRect");
+                                                         "proxyRect");
         fBlurRadiusVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType,
-                                                          kDefault_GrSLPrecision, "blurRadius");
+                                                          "blurRadius");
         fragBuilder->codeAppendf(
                 "\nhalf2 translatedFragPos = half2(sk_FragCoord.xy - %s.xy);\nhalf threshold = %s "
                 "+ 2.0 * %s;\nhalf2 middle = half2((%s.zw - %s.xy) - float(2.0 * threshold));\nif "
diff --git a/src/gpu/effects/GrRectBlurEffect.cpp b/src/gpu/effects/GrRectBlurEffect.cpp
index e0cf0d7..7ccaa34 100644
--- a/src/gpu/effects/GrRectBlurEffect.cpp
+++ b/src/gpu/effects/GrRectBlurEffect.cpp
@@ -31,20 +31,18 @@
                           abs(rect.bottom()) > 16000.0) ||
                          abs(rect.right() - rect.left()) > 16000.0) ||
                         abs(rect.bottom() - rect.top()) > 16000.0;
-        fRectVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                    kDefault_GrSLPrecision, "rect");
+        fRectVar =
+                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType, "rect");
         if (!highPrecision) {
-            fProxyRectHalfVar =
-                    args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType,
-                                                     kDefault_GrSLPrecision, "proxyRectHalf");
+            fProxyRectHalfVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                                 kHalf4_GrSLType, "proxyRectHalf");
         }
         if (highPrecision) {
-            fProxyRectFloatVar =
-                    args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                     kDefault_GrSLPrecision, "proxyRectFloat");
+            fProxyRectFloatVar = args.fUniformHandler->addUniform(
+                    kFragment_GrShaderFlag, kFloat4_GrSLType, "proxyRectFloat");
         }
         fProfileSizeVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType,
-                                                           kDefault_GrSLPrecision, "profileSize");
+                                                           "profileSize");
         fragBuilder->codeAppendf(
                 "/* key */ bool highPrecision = %s;\n@if (highPrecision) {\n    float2 "
                 "translatedPos = sk_FragCoord.xy - %s.xy;\n    float width = %s.z - %s.x;\n    "
diff --git a/src/gpu/effects/GrSkSLFP.cpp b/src/gpu/effects/GrSkSLFP.cpp
index 7e7f9b6..31da647 100644
--- a/src/gpu/effects/GrSkSLFP.cpp
+++ b/src/gpu/effects/GrSkSLFP.cpp
@@ -130,7 +130,6 @@
                 fUniformHandles.push_back(args.fUniformHandler->addUniform(
                                                                    kFragment_GrShaderFlag,
                                                                    this->uniformType(v->fType),
-                                                                   kDefault_GrSLPrecision,
                                                                    SkSL::String(v->fName).c_str()));
             }
         }
diff --git a/src/gpu/effects/GrYUVtoRGBEffect.cpp b/src/gpu/effects/GrYUVtoRGBEffect.cpp
index cf4c941..daa11aa 100644
--- a/src/gpu/effects/GrYUVtoRGBEffect.cpp
+++ b/src/gpu/effects/GrYUVtoRGBEffect.cpp
@@ -98,7 +98,7 @@
         (void)colorSpaceMatrix;
         fColorSpaceMatrixVar =
                 args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4x4_GrSLType,
-                                                 kDefault_GrSLPrecision, "colorSpaceMatrix");
+                                                 "colorSpaceMatrix");
 
         int numSamplers = args.fTexSamplers.count();
 
diff --git a/src/gpu/gl/GrGLUniformHandler.cpp b/src/gpu/gl/GrGLUniformHandler.cpp
index 24f4ac9..2448bc6 100644
--- a/src/gpu/gl/GrGLUniformHandler.cpp
+++ b/src/gpu/gl/GrGLUniformHandler.cpp
@@ -27,7 +27,6 @@
 GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray(
                                                                             uint32_t visibility,
                                                                             GrSLType type,
-                                                                            GrSLPrecision precision,
                                                                             const char* name,
                                                                             bool mangleName,
                                                                             int arrayCount,
@@ -35,7 +34,6 @@
     SkASSERT(name && strlen(name));
     SkASSERT(valid_name(name));
     SkASSERT(0 != visibility);
-    SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeTemporarilyAcceptsPrecision(type));
 
     UniformInfo& uni = fUniforms.push_back();
     uni.fVariable.setType(type);
@@ -53,7 +51,6 @@
     fProgramBuilder->nameVariable(uni.fVariable.accessName(), prefix, name, mangleName);
     uni.fVariable.setArrayCount(arrayCount);
     uni.fVisibility = visibility;
-    uni.fVariable.setPrecision(precision);
     uni.fLocation = -1;
 
     if (outName) {
@@ -72,14 +69,12 @@
     char prefix = 'u';
     fProgramBuilder->nameVariable(&mangleName, prefix, name, true);
 
-    GrSLPrecision precision = GrSLSamplerPrecision(texture->config());
     GrSwizzle swizzle = shaderCaps->configTextureSwizzle(texture->config());
     GrTextureType type = texture->texturePriv().textureType();
 
     UniformInfo& sampler = fSamplers.push_back();
     sampler.fVariable.setType(GrSLCombinedSamplerTypeForTextureType(type));
     sampler.fVariable.setTypeModifier(GrShaderVar::kUniform_TypeModifier);
-    sampler.fVariable.setPrecision(precision);
     sampler.fVariable.setName(mangleName);
     sampler.fLocation = -1;
     sampler.fVisibility = kFragment_GrShaderFlag;
diff --git a/src/gpu/gl/GrGLUniformHandler.h b/src/gpu/gl/GrGLUniformHandler.h
index 962beee..04653d4 100644
--- a/src/gpu/gl/GrGLUniformHandler.h
+++ b/src/gpu/gl/GrGLUniformHandler.h
@@ -33,7 +33,6 @@
 
     UniformHandle internalAddUniformArray(uint32_t visibility,
                                           GrSLType type,
-                                          GrSLPrecision precision,
                                           const char* name,
                                           bool mangleName,
                                           int arrayCount,
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index de892b5..cdfae83 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -353,18 +353,16 @@
         SkASSERT(!fUniformHandles.fRTWidthUni.isValid());
         GrGLSLUniformHandler* uniformHandler = this->uniformHandler();
         fUniformHandles.fRTWidthUni =
-            uniformHandler->internalAddUniformArray(kFragment_GrShaderFlag,
-                                                    kHalf_GrSLType, kDefault_GrSLPrecision,
-                                                    name, false, 0, nullptr);
+            uniformHandler->internalAddUniformArray(kFragment_GrShaderFlag, kHalf_GrSLType, name,
+                                                    false, 0, nullptr);
 }
 
 void GrGLSLProgramBuilder::addRTHeightUniform(const char* name) {
         SkASSERT(!fUniformHandles.fRTHeightUni.isValid());
         GrGLSLUniformHandler* uniformHandler = this->uniformHandler();
         fUniformHandles.fRTHeightUni =
-            uniformHandler->internalAddUniformArray(kFragment_GrShaderFlag,
-                                                    kHalf_GrSLType, kDefault_GrSLPrecision,
-                                                    name, false, 0, nullptr);
+            uniformHandler->internalAddUniformArray(kFragment_GrShaderFlag, kHalf_GrSLType, name,
+                                                    false, 0, nullptr);
 }
 
 void GrGLSLProgramBuilder::finalizeShaders() {
diff --git a/src/gpu/glsl/GrGLSLUniformHandler.h b/src/gpu/glsl/GrGLSLUniformHandler.h
index 5ee524c..607232e 100644
--- a/src/gpu/glsl/GrGLSLUniformHandler.h
+++ b/src/gpu/glsl/GrGLSLUniformHandler.h
@@ -45,30 +45,10 @@
         to add an array of uniforms. */
     UniformHandle addUniform(uint32_t visibility,
                              GrSLType type,
-                             GrSLPrecision precision,
                              const char* name,
                              const char** outName = nullptr) {
         SkASSERT(!GrSLTypeIsCombinedSamplerType(type));
-        return this->addUniformArray(visibility, type, precision, name, 0, outName);
-    }
-
-    UniformHandle addUniform(uint32_t visibility,
-                             GrSLType type,
-                             const char* name,
-                             const char** outName = nullptr) {
-        return this->addUniform(visibility, type, kDefault_GrSLPrecision, name, outName);
-    }
-
-    UniformHandle addUniformArray(uint32_t visibility,
-                                  GrSLType type,
-                                  GrSLPrecision precision,
-                                  const char* name,
-                                  int arrayCount,
-                                  const char** outName = nullptr) {
-        SkASSERT(!GrSLTypeIsCombinedSamplerType(type));
-        bool mangle = strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX));
-        return this->internalAddUniformArray(visibility, type, precision, name, mangle, arrayCount,
-                                             outName);
+        return this->addUniformArray(visibility, type, name, 0, outName);
     }
 
     UniformHandle addUniformArray(uint32_t visibility,
@@ -78,8 +58,7 @@
                                   const char** outName = nullptr) {
         SkASSERT(!GrSLTypeIsCombinedSamplerType(type));
         bool mangle = strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX));
-        return this->internalAddUniformArray(visibility, type, kDefault_GrSLPrecision, name, mangle,
-                                             arrayCount, outName);
+        return this->internalAddUniformArray(visibility, type, name, mangle, arrayCount, outName);
     }
 
     virtual const GrShaderVar& getUniformVariable(UniformHandle u) const = 0;
@@ -104,7 +83,6 @@
 
     virtual UniformHandle internalAddUniformArray(uint32_t visibility,
                                                   GrSLType type,
-                                                  GrSLPrecision precision,
                                                   const char* name,
                                                   bool mangleName,
                                                   int arrayCount,
diff --git a/src/gpu/glsl/GrGLSLVarying.cpp b/src/gpu/glsl/GrGLSLVarying.cpp
index a435f24..53f4533 100644
--- a/src/gpu/glsl/GrGLSLVarying.cpp
+++ b/src/gpu/glsl/GrGLSLVarying.cpp
@@ -109,22 +109,21 @@
         const char* modifier = v.fIsFlat ? "flat" : fDefaultInterpolationModifier;
         if (v.fVisibility & kVertex_GrShaderFlag) {
             fVertexOutputs.push_back().set(v.fType, v.fVsOut, GrShaderVar::kOut_TypeModifier,
-                                           kDefault_GrSLPrecision, nullptr, modifier);
+                                           nullptr, modifier);
             if (v.fVisibility & kGeometry_GrShaderFlag) {
                 fGeomInputs.push_back().set(v.fType, v.fVsOut, GrShaderVar::kUnsizedArray,
-                                            GrShaderVar::kIn_TypeModifier, kDefault_GrSLPrecision,
-                                            nullptr, modifier);
+                                            GrShaderVar::kIn_TypeModifier, nullptr, modifier);
             }
         }
         if (v.fVisibility & kFragment_GrShaderFlag) {
             const char* fsIn = v.fVsOut.c_str();
             if (v.fVisibility & kGeometry_GrShaderFlag) {
                 fGeomOutputs.push_back().set(v.fType, v.fGsOut, GrShaderVar::kOut_TypeModifier,
-                                             kDefault_GrSLPrecision, nullptr, modifier);
+                                             nullptr, modifier);
                 fsIn = v.fGsOut.c_str();
             }
-            fFragInputs.push_back().set(v.fType, fsIn, GrShaderVar::kIn_TypeModifier,
-                                        kDefault_GrSLPrecision, nullptr, modifier);
+            fFragInputs.push_back().set(v.fType, fsIn, GrShaderVar::kIn_TypeModifier, nullptr,
+                                        modifier);
         }
     }
     this->onFinalize();
diff --git a/src/gpu/gradients/GrClampedGradientEffect.cpp b/src/gpu/gradients/GrClampedGradientEffect.cpp
index df13771..034ee1d 100644
--- a/src/gpu/gradients/GrClampedGradientEffect.cpp
+++ b/src/gpu/gradients/GrClampedGradientEffect.cpp
@@ -30,11 +30,10 @@
         (void)makePremul;
         auto colorsAreOpaque = _outer.colorsAreOpaque();
         (void)colorsAreOpaque;
-        fLeftBorderColorVar = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kHalf4_GrSLType, kDefault_GrSLPrecision, "leftBorderColor");
-        fRightBorderColorVar =
-                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType,
-                                                 kDefault_GrSLPrecision, "rightBorderColor");
+        fLeftBorderColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                               kHalf4_GrSLType, "leftBorderColor");
+        fRightBorderColorVar = args.fUniformHandler->addUniform(
+                kFragment_GrShaderFlag, kHalf4_GrSLType, "rightBorderColor");
         SkString _child1("_child1");
         this->emitChild(_outer.gradLayout_index(), &_child1, args);
         fragBuilder->codeAppendf(
diff --git a/src/gpu/gradients/GrDualIntervalGradientColorizer.cpp b/src/gpu/gradients/GrDualIntervalGradientColorizer.cpp
index e18f4d7..f121e44 100644
--- a/src/gpu/gradients/GrDualIntervalGradientColorizer.cpp
+++ b/src/gpu/gradients/GrDualIntervalGradientColorizer.cpp
@@ -34,15 +34,15 @@
         auto threshold = _outer.threshold();
         (void)threshold;
         fScale01Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                       kDefault_GrSLPrecision, "scale01");
+                                                       "scale01");
         fBias01Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                      kDefault_GrSLPrecision, "bias01");
+                                                      "bias01");
         fScale23Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                       kDefault_GrSLPrecision, "scale23");
+                                                       "scale23");
         fBias23Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                      kDefault_GrSLPrecision, "bias23");
+                                                      "bias23");
         fThresholdVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType,
-                                                         kDefault_GrSLPrecision, "threshold");
+                                                         "threshold");
         fragBuilder->codeAppendf(
                 "half t = %s.x;\nfloat4 scale, bias;\nif (t < %s) {\n    scale = %s;\n    bias = "
                 "%s;\n} else {\n    scale = %s;\n    bias = %s;\n}\n%s = half4(float(t) * scale + "
diff --git a/src/gpu/gradients/GrSingleIntervalGradientColorizer.cpp b/src/gpu/gradients/GrSingleIntervalGradientColorizer.cpp
index f5de696..824a779 100644
--- a/src/gpu/gradients/GrSingleIntervalGradientColorizer.cpp
+++ b/src/gpu/gradients/GrSingleIntervalGradientColorizer.cpp
@@ -27,10 +27,9 @@
         (void)start;
         auto end = _outer.end();
         (void)end;
-        fStartVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType,
-                                                     kDefault_GrSLPrecision, "start");
-        fEndVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType,
-                                                   kDefault_GrSLPrecision, "end");
+        fStartVar =
+                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "start");
+        fEndVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "end");
         fragBuilder->codeAppendf("half t = %s.x;\n%s = (1.0 - t) * %s + t * %s;\n",
                                  args.fInputColor, args.fOutputColor,
                                  args.fUniformHandler->getUniformCStr(fStartVar),
diff --git a/src/gpu/gradients/GrSweepGradientLayout.cpp b/src/gpu/gradients/GrSweepGradientLayout.cpp
index 2269e25..9e2fa6b 100644
--- a/src/gpu/gradients/GrSweepGradientLayout.cpp
+++ b/src/gpu/gradients/GrSweepGradientLayout.cpp
@@ -28,10 +28,9 @@
         (void)bias;
         auto scale = _outer.scale();
         (void)scale;
-        fBiasVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType,
-                                                    kDefault_GrSLPrecision, "bias");
-        fScaleVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType,
-                                                     kDefault_GrSLPrecision, "scale");
+        fBiasVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType, "bias");
+        fScaleVar =
+                args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType, "scale");
         SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]);
         fragBuilder->codeAppendf(
                 "half angle;\nif (sk_Caps.atan2ImplementedAsAtanYOverX) {\n    angle = half(2.0 * "
diff --git a/src/gpu/gradients/GrTwoPointConicalGradientLayout.cpp b/src/gpu/gradients/GrTwoPointConicalGradientLayout.cpp
index f268e16..5fb4509 100644
--- a/src/gpu/gradients/GrTwoPointConicalGradientLayout.cpp
+++ b/src/gpu/gradients/GrTwoPointConicalGradientLayout.cpp
@@ -40,7 +40,7 @@
         auto focalParams = _outer.focalParams();
         (void)focalParams;
         fFocalParamsVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf2_GrSLType,
-                                                           kDefault_GrSLPrecision, "focalParams");
+                                                           "focalParams");
         SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]);
         fragBuilder->codeAppendf(
                 "float2 p = %s;\nfloat t = -1.0;\nhalf v = 1.0;\n@switch (%d) {\n    case 1:\n     "
diff --git a/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp b/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
index 3082c6a..f34baae 100644
--- a/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
+++ b/src/gpu/gradients/GrUnrolledBinaryGradientColorizer.cpp
@@ -62,69 +62,69 @@
         auto thresholds9_13 = _outer.thresholds9_13();
         (void)thresholds9_13;
         fScale0_1Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                        kDefault_GrSLPrecision, "scale0_1");
+                                                        "scale0_1");
         if (intervalCount > 1) {
-            fScale2_3Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "scale2_3");
+            fScale2_3Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                            kFloat4_GrSLType, "scale2_3");
         }
         if (intervalCount > 2) {
-            fScale4_5Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "scale4_5");
+            fScale4_5Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                            kFloat4_GrSLType, "scale4_5");
         }
         if (intervalCount > 3) {
-            fScale6_7Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "scale6_7");
+            fScale6_7Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                            kFloat4_GrSLType, "scale6_7");
         }
         if (intervalCount > 4) {
-            fScale8_9Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "scale8_9");
+            fScale8_9Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                            kFloat4_GrSLType, "scale8_9");
         }
         if (intervalCount > 5) {
-            fScale10_11Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "scale10_11");
+            fScale10_11Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                              kFloat4_GrSLType, "scale10_11");
         }
         if (intervalCount > 6) {
-            fScale12_13Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "scale12_13");
+            fScale12_13Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                              kFloat4_GrSLType, "scale12_13");
         }
         if (intervalCount > 7) {
-            fScale14_15Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "scale14_15");
+            fScale14_15Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                              kFloat4_GrSLType, "scale14_15");
         }
         fBias0_1Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                       kDefault_GrSLPrecision, "bias0_1");
+                                                       "bias0_1");
         if (intervalCount > 1) {
             fBias2_3Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                           kDefault_GrSLPrecision, "bias2_3");
+                                                           "bias2_3");
         }
         if (intervalCount > 2) {
             fBias4_5Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                           kDefault_GrSLPrecision, "bias4_5");
+                                                           "bias4_5");
         }
         if (intervalCount > 3) {
             fBias6_7Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                           kDefault_GrSLPrecision, "bias6_7");
+                                                           "bias6_7");
         }
         if (intervalCount > 4) {
             fBias8_9Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType,
-                                                           kDefault_GrSLPrecision, "bias8_9");
+                                                           "bias8_9");
         }
         if (intervalCount > 5) {
-            fBias10_11Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "bias10_11");
+            fBias10_11Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                             kFloat4_GrSLType, "bias10_11");
         }
         if (intervalCount > 6) {
-            fBias12_13Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "bias12_13");
+            fBias12_13Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                             kFloat4_GrSLType, "bias12_13");
         }
         if (intervalCount > 7) {
-            fBias14_15Var = args.fUniformHandler->addUniform(
-                    kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "bias14_15");
+            fBias14_15Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                             kFloat4_GrSLType, "bias14_15");
         }
-        fThresholds1_7Var = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kHalf4_GrSLType, kDefault_GrSLPrecision, "thresholds1_7");
-        fThresholds9_13Var = args.fUniformHandler->addUniform(
-                kFragment_GrShaderFlag, kHalf4_GrSLType, kDefault_GrSLPrecision, "thresholds9_13");
+        fThresholds1_7Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                             kHalf4_GrSLType, "thresholds1_7");
+        fThresholds9_13Var = args.fUniformHandler->addUniform(kFragment_GrShaderFlag,
+                                                              kHalf4_GrSLType, "thresholds9_13");
         fragBuilder->codeAppendf(
                 "half t = %s.x;\nfloat4 scale, bias;\nif (%d <= 4 || t < %s.w) {\n    if (%d <= 2 "
                 "|| t < %s.y) {\n        if (%d <= 1 || t < %s.x) {\n            scale = %s;\n     "
diff --git a/src/gpu/mtl/GrMtlUniformHandler.h b/src/gpu/mtl/GrMtlUniformHandler.h
index 6e60cb0..b117e9c 100644
--- a/src/gpu/mtl/GrMtlUniformHandler.h
+++ b/src/gpu/mtl/GrMtlUniformHandler.h
@@ -55,7 +55,6 @@
 
     UniformHandle internalAddUniformArray(uint32_t visibility,
                                           GrSLType type,
-                                          GrSLPrecision precision,
                                           const char* name,
                                           bool mangleName,
                                           int arrayCount,
diff --git a/src/gpu/mtl/GrMtlUniformHandler.mm b/src/gpu/mtl/GrMtlUniformHandler.mm
index da51e65..505e894 100644
--- a/src/gpu/mtl/GrMtlUniformHandler.mm
+++ b/src/gpu/mtl/GrMtlUniformHandler.mm
@@ -199,7 +199,6 @@
 GrGLSLUniformHandler::UniformHandle GrMtlUniformHandler::internalAddUniformArray(
                                                                             uint32_t visibility,
                                                                             GrSLType type,
-                                                                            GrSLPrecision precision,
                                                                             const char* name,
                                                                             bool mangleName,
                                                                             int arrayCount,
@@ -211,7 +210,6 @@
              kGeometry_GrShaderFlag == visibility ||
              (kVertex_GrShaderFlag | kGeometry_GrShaderFlag) == visibility ||
              kFragment_GrShaderFlag == visibility);
-    SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type));
     GrSLTypeIsFloatType(type);
 
     UniformInfo& uni = fUniforms.push_back();
@@ -229,7 +227,6 @@
     fProgramBuilder->nameVariable(uni.fVariable.accessName(), prefix, name, mangleName);
     uni.fVariable.setArrayCount(arrayCount);
     uni.fVisibility = visibility;
-    uni.fVariable.setPrecision(precision);
     // When outputing the GLSL, only the outer uniform block will get the Uniform modifier. Thus
     // we set the modifier to none for all uniforms declared inside the block.
     uni.fVariable.setTypeModifier(GrShaderVar::kNone_TypeModifier);
@@ -267,14 +264,12 @@
     char prefix = 'u';
     fProgramBuilder->nameVariable(&mangleName, prefix, name, true);
 
-    GrSLPrecision precision = GrSLSamplerPrecision(texture->config());
     GrSwizzle swizzle = caps->configTextureSwizzle(texture->config());
     GrTextureType type = texture->texturePriv().textureType();
 
     UniformInfo& info = fSamplers.push_back();
     info.fVariable.setType(GrSLCombinedSamplerTypeForTextureType(type));
     info.fVariable.setTypeModifier(GrShaderVar::kUniform_TypeModifier);
-    info.fVariable.setPrecision(precision);
     info.fVariable.setName(mangleName);
     SkString layoutQualifier;
     layoutQualifier.appendf("binding=%d", fSamplers.count() - 1);
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index 3a35cfc..e286328 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -203,7 +203,6 @@
 GrGLSLUniformHandler::UniformHandle GrVkUniformHandler::internalAddUniformArray(
                                                                             uint32_t visibility,
                                                                             GrSLType type,
-                                                                            GrSLPrecision precision,
                                                                             const char* name,
                                                                             bool mangleName,
                                                                             int arrayCount,
@@ -215,7 +214,6 @@
              kGeometry_GrShaderFlag == visibility ||
              (kVertex_GrShaderFlag | kGeometry_GrShaderFlag) == visibility ||
              kFragment_GrShaderFlag == visibility);
-    SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type));
     GrSLTypeIsFloatType(type);
 
     UniformInfo& uni = fUniforms.push_back();
@@ -233,7 +231,6 @@
     fProgramBuilder->nameVariable(uni.fVariable.accessName(), prefix, name, mangleName);
     uni.fVariable.setArrayCount(arrayCount);
     uni.fVisibility = visibility;
-    uni.fVariable.setPrecision(precision);
     // When outputing the GLSL, only the outer uniform block will get the Uniform modifier. Thus
     // we set the modifier to none for all uniforms declared inside the block.
     uni.fVariable.setTypeModifier(GrShaderVar::kNone_TypeModifier);
@@ -268,14 +265,12 @@
     char prefix = 'u';
     fProgramBuilder->nameVariable(&mangleName, prefix, name, true);
 
-    GrSLPrecision precision = GrSLSamplerPrecision(texture->config());
     GrSwizzle swizzle = shaderCaps->configTextureSwizzle(texture->config());
     GrTextureType type = texture->texturePriv().textureType();
 
     UniformInfo& info = fSamplers.push_back();
     info.fVariable.setType(GrSLCombinedSamplerTypeForTextureType(type));
     info.fVariable.setTypeModifier(GrShaderVar::kUniform_TypeModifier);
-    info.fVariable.setPrecision(precision);
     info.fVariable.setName(mangleName);
     SkString layoutQualifier;
     layoutQualifier.appendf("set=%d, binding=%d", kSamplerDescSet, fSamplers.count() - 1);
diff --git a/src/gpu/vk/GrVkUniformHandler.h b/src/gpu/vk/GrVkUniformHandler.h
index 73b17d2..08c3209 100644
--- a/src/gpu/vk/GrVkUniformHandler.h
+++ b/src/gpu/vk/GrVkUniformHandler.h
@@ -64,7 +64,6 @@
 
     UniformHandle internalAddUniformArray(uint32_t visibility,
                                           GrSLType type,
-                                          GrSLPrecision precision,
                                           const char* name,
                                           bool mangleName,
                                           int arrayCount,
diff --git a/src/shaders/SkLightingShader.cpp b/src/shaders/SkLightingShader.cpp
index e7e4a7b..ac478ad 100644
--- a/src/shaders/SkLightingShader.cpp
+++ b/src/shaders/SkLightingShader.cpp
@@ -150,22 +150,19 @@
                 fLightDirsUni = uniformHandler->addUniformArray(
                         kFragment_GrShaderFlag,
                         kFloat3_GrSLType,
-                        kDefault_GrSLPrecision,
                         "LightDir",
                         lightingFP.fDirectionalLights.count(),
                         &lightDirsUniName);
                 fLightColorsUni = uniformHandler->addUniformArray(
                         kFragment_GrShaderFlag,
                         kFloat3_GrSLType,
-                        kDefault_GrSLPrecision,
                         "LightColor",
                         lightingFP.fDirectionalLights.count(),
                         &lightColorsUniName);
             }
 
             const char* ambientColorUniName = nullptr;
-            fAmbientColorUni = uniformHandler->addUniform(kFragment_GrShaderFlag,
-                                                          kFloat3_GrSLType, kDefault_GrSLPrecision,
+            fAmbientColorUni = uniformHandler->addUniform(kFragment_GrShaderFlag, kFloat3_GrSLType,
                                                           "AmbientColor", &ambientColorUniName);
 
             fragBuilder->codeAppendf("half4 diffuseColor = %s;", args.fInputColor);
diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp
index 098fc48..7d9d5ac7 100644
--- a/src/sksl/SkSLCPPCodeGenerator.cpp
+++ b/src/sksl/SkSLCPPCodeGenerator.cpp
@@ -534,16 +534,6 @@
     if (!needs_uniform_var(var)) {
         return;
     }
-    const char* precision;
-    if (var.fModifiers.fFlags & Modifiers::kHighp_Flag) {
-        precision = "kHigh_GrSLPrecision";
-    } else if (var.fModifiers.fFlags & Modifiers::kMediump_Flag) {
-        precision = "kMedium_GrSLPrecision";
-    } else if (var.fModifiers.fFlags & Modifiers::kLowp_Flag) {
-        precision = "kLow_GrSLPrecision";
-    } else {
-        precision = "kDefault_GrSLPrecision";
-    }
     const char* type;
     if (var.fType == *fContext.fFloat_Type) {
         type = "kFloat_GrSLType";
@@ -570,7 +560,7 @@
     }
     String name(var.fName);
     this->writef("        %sVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, %s, "
-                 "%s, \"%s\");\n", HCodeGenerator::FieldName(name.c_str()).c_str(), type, precision,
+                 "\"%s\");\n", HCodeGenerator::FieldName(name.c_str()).c_str(), type,
                  name.c_str());
     if (var.fModifiers.fLayout.fWhen.size()) {
         this->write("        }\n");
diff --git a/src/sksl/SkSLContext.h b/src/sksl/SkSLContext.h
index aeaf20b..eef7dd5 100644
--- a/src/sksl/SkSLContext.h
+++ b/src/sksl/SkSLContext.h
@@ -24,11 +24,11 @@
     , fNull_Type(new Type("null"))
     , fFloatLiteral_Type(new Type("$floatLiteral", Type::kFloat_NumberKind, 3))
     , fIntLiteral_Type(new Type("$intLiteral", Type::kSigned_NumberKind, 1))
-    , fDouble_Type(new Type("double", Type::kFloat_NumberKind, 6))
+    , fDouble_Type(new Type("double", Type::kFloat_NumberKind, 6, true))
     , fDouble2_Type(new Type("double2", *fDouble_Type, 2))
     , fDouble3_Type(new Type("double3", *fDouble_Type, 3))
     , fDouble4_Type(new Type("double4", *fDouble_Type, 4))
-    , fFloat_Type(new Type("float", Type::kFloat_NumberKind, 5))
+    , fFloat_Type(new Type("float", Type::kFloat_NumberKind, 5, true))
     , fFloat2_Type(new Type("float2", *fFloat_Type, 2))
     , fFloat3_Type(new Type("float3", *fFloat_Type, 3))
     , fFloat4_Type(new Type("float4", *fFloat_Type, 4))
@@ -36,11 +36,11 @@
     , fHalf2_Type(new Type("half2", *fHalf_Type, 2))
     , fHalf3_Type(new Type("half3", *fHalf_Type, 3))
     , fHalf4_Type(new Type("half4", *fHalf_Type, 4))
-    , fUInt_Type(new Type("uint", Type::kUnsigned_NumberKind, 2))
+    , fUInt_Type(new Type("uint", Type::kUnsigned_NumberKind, 2, true))
     , fUInt2_Type(new Type("uint2", *fUInt_Type, 2))
     , fUInt3_Type(new Type("uint3", *fUInt_Type, 3))
     , fUInt4_Type(new Type("uint4", *fUInt_Type, 4))
-    , fInt_Type(new Type("int", Type::kSigned_NumberKind, 2))
+    , fInt_Type(new Type("int", Type::kSigned_NumberKind, 2, true))
     , fInt2_Type(new Type("int2", *fInt_Type, 2))
     , fInt3_Type(new Type("int3", *fInt_Type, 3))
     , fInt4_Type(new Type("int4", *fInt_Type, 4))
diff --git a/src/sksl/SkSLGLSLCodeGenerator.cpp b/src/sksl/SkSLGLSLCodeGenerator.cpp
index 285a94c..d003dc9 100644
--- a/src/sksl/SkSLGLSLCodeGenerator.cpp
+++ b/src/sksl/SkSLGLSLCodeGenerator.cpp
@@ -1140,16 +1140,24 @@
     if (modifiers.fFlags & Modifiers::kPLSOut_Flag) {
         this->write("__pixel_local_outEXT ");
     }
-    if (usesPrecisionModifiers()) {
-        if (modifiers.fFlags & Modifiers::kLowp_Flag) {
-            this->write("lowp ");
-        }
-        if (modifiers.fFlags & Modifiers::kMediump_Flag) {
-            this->write("mediump ");
-        }
-        if (modifiers.fFlags & Modifiers::kHighp_Flag) {
+    switch (modifiers.fLayout.fFormat) {
+        case Layout::Format::kUnspecified:
+            break;
+        case Layout::Format::kRGBA32F: // fall through
+        case Layout::Format::kR32F:
             this->write("highp ");
-        }
+            break;
+        case Layout::Format::kRGBA16F: // fall through
+        case Layout::Format::kR16F:    // fall through
+        case Layout::Format::kRG16F:
+            this->write("mediump ");
+            break;
+        case Layout::Format::kRGBA8:  // fall through
+        case Layout::Format::kR8:     // fall through
+        case Layout::Format::kRGBA8I: // fall through
+        case Layout::Format::kR8I:
+            this->write("lowp ");
+            break;
     }
 }
 
@@ -1568,14 +1576,20 @@
         Layout layout;
         switch (fProgram.fKind) {
             case Program::kVertex_Kind: {
-                Modifiers modifiers(layout, Modifiers::kOut_Flag | Modifiers::kHighp_Flag);
+                Modifiers modifiers(layout, Modifiers::kOut_Flag);
                 this->writeModifiers(modifiers, true);
+                if (this->usesPrecisionModifiers()) {
+                    this->write("highp ");
+                }
                 this->write("vec4 sk_FragCoord_Workaround;\n");
                 break;
             }
             case Program::kFragment_Kind: {
-                Modifiers modifiers(layout, Modifiers::kIn_Flag | Modifiers::kHighp_Flag);
+                Modifiers modifiers(layout, Modifiers::kIn_Flag);
                 this->writeModifiers(modifiers, true);
+                if (this->usesPrecisionModifiers()) {
+                    this->write("highp ");
+                }
                 this->write("vec4 sk_FragCoord_Workaround;\n");
                 break;
             }
diff --git a/src/sksl/SkSLLexer.cpp b/src/sksl/SkSLLexer.cpp
index 4dfc3df..9340f46 100644
--- a/src/sksl/SkSLLexer.cpp
+++ b/src/sksl/SkSLLexer.cpp
@@ -16,1038 +16,988 @@
         3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  1,  4,  3,  5,  6,  7,  8,  3,  9,  10, 11, 12,
         13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26,
         26, 26, 26, 27, 26, 6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  28, 6,  6,  6,
-        29, 6,  6,  30, 3,  31, 32, 33, 3,  34, 35, 36, 37, 38, 39, 40, 41, 42, 6,  43, 44, 45,
-        46, 47, 48, 6,  49, 50, 51, 52, 53, 54, 55, 56, 6,  57, 58, 59, 60};
-static int16_t transitions[61][319] = {
+        29, 6,  6,  30, 3,  31, 32, 33, 3,  34, 35, 36, 37, 38, 39, 6,  40, 41, 6,  42, 43, 44,
+        45, 46, 47, 6,  48, 49, 50, 51, 52, 53, 54, 55, 6,  56, 57, 58, 59};
+static int16_t transitions[60][304] = {
         {
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 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, 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, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0, 3, 3, 3, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 3, 3, 3, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 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,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 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,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0,  0,  0,  0,
+                0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 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, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 35, 35, 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,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 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, 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, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0,
         },
         {
-                0, 17, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 17, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0, 18, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 18, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 36, 35, 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,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 35, 36, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0,  21, 0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 22, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 32, 0, 0, 0, 35, 35, 0, 38, 0, 0, 0, 0, 44, 0, 0, 47, 0, 0, 0,
-                51, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
+                0, 21, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 22, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 32, 0, 0, 0, 35, 35, 0, 38, 0, 0, 0, 0, 44, 0, 0,  47, 0,
+                0, 0,  51, 0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0,  0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0,  25, 0, 0, 0, 0, 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, 32, 0, 0, 0, 35, 35, 0, 38, 0, 0, 0, 0, 44, 0, 0, 47, 0, 0, 0,
-                51, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
+                0, 25, 0,  0, 0, 0, 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, 32, 0, 0, 0, 35, 35, 0, 38, 0, 0, 0, 0, 44, 0, 0, 47, 0,
+                0, 0,  51, 0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,  0, 0, 0,  0,
+                0, 0,  0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 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, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0,  0, 0, 0, 0, 35, 35, 0, 38, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 41,
-                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, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 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,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,
+                0, 0,  0, 0,  0, 0, 0, 0, 0, 35, 35, 0, 38, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 41, 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, 0,
+                0, 0,  0, 0,  0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,
+                0, 0,  0, 0,  0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,
+                0, 0,  0, 0,  0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,
+                0, 0,  0, 0,  0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,
+                0, 0,  0, 0,  0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,
+                0, 0,  0, 0,  0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0,
         },
         {
-                0, 34, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 38, 35, 37, 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,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0,
+                0, 34, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 38, 35, 37, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 0,  0,  0,  0,  0,  0,  8,  10, 10, 0,  0,  0,  0,  0,  0,  0,  0,  0,
-                0,  0,  0,  0,  0,  0,  0,  0,  0,  30, 30, 33, 33, 33, 0,  35, 35, 0,  38, 0,
-                49, 42, 42, 45, 45, 45, 48, 48, 48, 49, 52, 52, 52, 54, 54, 49, 0,  0,  0,  0,
-                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  40, 0,  0,  0,  0,  0,  0,  8,  10, 10, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  0,  30, 30, 33, 33, 33, 0,  35, 35, 0,  38, 0,  49, 42,
+                42, 45, 45, 45, 48, 48, 48, 49, 52, 52, 52, 54, 54, 49, 0,  0,  0,  0,  0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 0,  0,  0,  0,
+                0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  55, 0,  0,  0,  0,  0,  0,  8,  10, 10, 0,  0,  0,  0,  0,  0,  0,  0,  0,
-                0,  0,  0,  0,  0,  0,  0,  0,  0,  30, 30, 33, 33, 33, 0,  35, 35, 0,  38, 0,
-                49, 42, 42, 45, 45, 45, 48, 48, 48, 49, 52, 52, 52, 54, 54, 49, 0,  0,  0,  0,
-                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  55, 0,  0,  0,  0,  0,  0,  8,  10, 10, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  0,  30, 30, 33, 33, 33, 0,  35, 35, 0,  38, 0,  49, 42,
+                42, 45, 45, 45, 48, 48, 48, 49, 52, 52, 52, 54, 54, 49, 0,  0,  0,  0,  0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 0,  0,  0,  0,
+                0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0, 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, 35, 35, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 57, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 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, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 35, 35, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 57, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0, 58, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 58, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0, 59, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  35, 35, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 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,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0, 0,  0, 0, 0, 0, 0,
+                0, 59, 0, 0, 0, 0, 0, 0,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0,  0, 35, 35, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 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,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 12, 0,  16, 15,  0,  0,   0,  0, 20, 0, 23, 0,
-                0, 0,  27, 0, 0, 0, 0, 0, 0, 0, 0, 39, 35, 35, 0,   38, 0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  62, 61,  0,  0,   64, 0, 66, 0, 68, 0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  83, 0,   85, 0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0,  0,   0,  0, 0,  0, 0,  0,
-                0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  314, 0,  316, 0,  0, 0,
+                0, 63, 0, 0, 0, 6, 0, 0, 0, 0, 0,   12, 0,   16, 15, 0,  0, 0,  0, 20, 0, 23, 0, 0,
+                0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 39,  35, 35,  0,  38, 0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   62, 61,  0,  0,  64, 0, 66, 0, 68, 0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 83,  0,  85,  0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,  0,  0,  0, 0,  0, 0,  0, 0,  0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 299, 0,  301, 0,  0,  0,
         },
         {
-                0,  65, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                28, 0,  0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0,  0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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,  67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 0,  38, 0,
-                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  54, 54, 0,  0,  0,  0,  0,
-                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 0,  38, 0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  54, 54, 0,  0,  0,  0,  0,  0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0,  0,  0,  0,
+                0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  9,  0,  0,  0,   0,  0,  8,  8,  10, 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-                0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  31,  0,  0,  0,  0,  35, 35, 0,  38, 0,
-                50, 46, 43, 0,  0,   0,  0,  0,  0,  50, 0,   0,  0,  54, 54, 50, 0,  0,  0,  0,
-                0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  71,  71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,   0,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 99, 10,
-                10, 10, 10, 10, 105, 10, 10, 10, 10, 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 0,  0,  0,  0,  0,  0,  0,
+                0,  9,  0,  0,  0,  0,  0,  8,  8,  10,  10, 0,  0,  0,  0,  0,   0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   0,  31, 0,  0,  0,  0,   35, 35, 0,
+                38, 0,  50, 46, 43, 0,  0,  0,  0,  0,   0,  50, 0,  0,  0,  54,  54, 50, 0,
+                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  71, 71, 71,  71, 71, 71,
+                71, 71, 71, 71, 0,  0,  0,  0,  0,  0,   10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 99, 10, 10, 10, 10, 10, 105, 10, 10, 10, 10, 10, 111, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 0,  0,  0,  0,   0,  0,  0,
         },
         {
-                0,   9,  0,  0,  0,  0,  0,   8,  8,  10, 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,  35, 35, 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,  71, 71, 71,  71, 71, 71, 71, 71, 71, 71,
-                0,   0,  0,  0,  0,  0,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                101, 10, 10, 10, 10, 10, 107, 10, 10, 10, 10, 10, 113, 10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10,
-                10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 0,   0,  0,  0,  0,  0,  0,
+                0,  9,  0,  0,  0,  0,   0,  8,  8,  10, 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,  35, 35,  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,  71, 71, 71, 71, 71,  71,
+                71, 71, 71, 71, 0,  0,   0,  0,  0,  0,  10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 101, 10, 10, 10, 10, 10, 107, 10, 10, 10, 10, 10, 113, 10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,
+                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  0,  0,  0,  0,  0,  0,   0,
         },
         {
-                0,  9,  0,  0,  0,  0,   0,  8,  8,  10, 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,  35, 35, 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,  71, 71,  71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,   10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 100,
-                10, 10, 10, 10, 10, 106, 10, 10, 10, 10, 10, 112, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  0,  0,  0,  0,  0,  0,  0,
+                0,  9,  0,  0,  0,   0,  0,  8,  8,  10, 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,  35,  35, 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,  71, 71, 71, 71,  71, 71,
+                71, 71, 71, 71, 0,   0,  0,  0,  0,  0,  10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 100, 10, 10, 10, 10, 10, 106, 10, 10, 10, 10, 10, 112, 10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 0,  0,  0,  0,  0,   0,  0,
         },
         {
-                0, 80, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 35, 35, 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, 84, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 35, 35, 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, 84, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,  0, 0, 0,  0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 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,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35,  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,  71, 71, 71,  71, 71, 71, 71,  71, 71,  71,
-                0,  0,   0,  0,  0,  0,  87, 10, 10, 10, 10, 10, 93,  10, 10, 10, 10,  10, 102, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 253, 10, 10, 10, 257, 10, 10,  10,
-                10, 262, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,   0,  0,  0,  0,   0,  0,
+                0,  86, 0,  0,   0,  0,  0,  8,  8,  10,  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,  35, 35, 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,  71,  71, 71, 71, 71, 71,
+                71, 71, 71, 71,  0,  0,  0,  0,  0,  0,   87, 10, 10, 10,  10, 10, 93, 10, 10,
+                10, 10, 10, 102, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 238, 10, 10, 10, 242, 10, 10, 10, 10, 247,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 0,  0,   0,  0,  0,  0,  0,
         },
         {
-                0,  9,  0,   0,  0,   0,  0,   8,   8,   10, 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,  35,  35, 0,
-                38, 0,  0,   0,  0,   0,  0,   0,   0,   0,  0,   0,  0,  0,  0,   54, 54,  0,  0,
-                0,  0,  0,   0,  0,   0,  0,   0,   0,   0,  0,   0,  0,  71, 71,  71, 71,  71, 71,
-                71, 71, 71,  71, 0,   0,  0,   0,   0,   0,  10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 97, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 10, 117, 10, 10,  10, 10,  10,  10,  10, 125, 10, 10, 10, 129, 10, 10,  10, 10,
-                10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10, 10, 10, 10,  10, 150, 10, 10,
-                10, 10, 10,  10, 157, 10, 10,  10,  10,  10, 10,  10, 10, 10, 10,  10, 169, 10, 10,
-                10, 10, 174, 10, 10,  10, 10,  10,  10,  10, 10,  10, 10, 10, 10,  10, 10,  10, 190,
-                10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 10, 10,  10, 10,  10, 235, 10,  10,  10, 10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 10, 10,  10, 10,  10, 10,  255, 10,  10, 10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 10, 10,  10, 10,  10, 10,  10,  294, 10, 10,  10, 10, 10, 10,  10, 10,  10, 10,
-                10, 10, 10,  10, 10,  10, 10,  10,  0,   0,  0,   0,  0,  0,  0,
+                0,  9,  0,   0,  0,   0,  0,  8,  8,  10, 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,  35,  35, 0,
+                38, 0,  0,   0,  0,   0,  0,  0,  0,  0,  0,   0,   0,   0,   0,   54, 54,  0,  0,
+                0,  0,  0,   0,  0,   0,  0,  0,  0,  0,  0,   0,   0,   71,  71,  71, 71,  71, 71,
+                71, 71, 71,  71, 0,   0,  0,  0,  0,  0,  10,  10,  10,  10,  10,  10, 10,  10, 10,
+                10, 97, 10,  10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10,  10,  10, 10,  10, 10,
+                10, 10, 117, 10, 10,  10, 10, 10, 10, 10, 125, 10,  10,  10,  129, 10, 10,  10, 10,
+                10, 10, 10,  10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10,  10,  10, 150, 10, 10,
+                10, 10, 10,  10, 157, 10, 10, 10, 10, 10, 10,  10,  10,  10,  10,  10, 169, 10, 10,
+                10, 10, 174, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  185, 10,  10, 10,  10, 10,
+                10, 10, 10,  10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10,  10,  10, 10,  10, 10,
+                10, 10, 10,  10, 10,  10, 10, 10, 10, 10, 220, 10,  10,  10,  10,  10, 10,  10, 10,
+                10, 10, 10,  10, 10,  10, 10, 10, 10, 10, 10,  240, 10,  10,  10,  10, 10,  10, 10,
+                10, 10, 10,  10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10,  10,  10, 10,  10, 10,
+                10, 10, 10,  10, 10,  10, 10, 10, 10, 10, 10,  10,  279, 10,  10,  10, 10,  10, 10,
+                10, 10, 10,  10, 10,  10, 10, 10, 10, 10, 10,  10,  0,   0,   0,   0,  0,   0,  0,
         },
         {
-                0,  114, 0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 0,  38, 0,
-                0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  54, 54, 0,  0,  0,  0,  0,
-                0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,   0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  114, 0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 0,  38, 0,  0,  0,
+                0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  54, 54, 0,  0,  0,  0,  0,  0,  0,  0,
+                0,  0,   0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0,  0,  0,  0,
+                0,  0,   10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,   124, 0,  0,   0,  0,  0,   8,  8,  10, 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,  35,  35,  0,
-                38,  0,   0,  0,   0,  0,  0,   0,  0,  0,  0,  0,   0,  0,  0,  54, 54,  0,   0,
-                0,   0,   0,  0,   0,  0,  0,   0,  0,  0,  0,  0,   0,  71, 71, 71, 71,  71,  71,
-                71,  78,  71, 71,  0,  0,  0,   0,  0,  0,  10, 10,  10, 10, 10, 10, 10,  10,  10,
-                96,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 156, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 213, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  227, 10,
-                10,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 245, 10,  10,
-                10,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                267, 10,  10, 10,  10, 10, 273, 10, 10, 10, 10, 278, 10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,  10,
-                10,  10,  10, 10,  10, 10, 10,  10, 0,  0,  0,  0,   0,  0,  0,
+                0,  124, 0,   0,   0,   0,  0,  8,   8,  10, 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,   35, 35, 0,
+                38, 0,   0,   0,   0,   0,  0,  0,   0,  0,  0,   0,  0,  0,  0,  54,  54, 0,  0,
+                0,  0,   0,   0,   0,   0,  0,  0,   0,  0,  0,   0,  0,  71, 71, 71,  71, 71, 71,
+                71, 78,  71,  71,  0,   0,  0,  0,   0,  0,  10,  10, 10, 10, 10, 10,  10, 10, 10,
+                96, 10,  10,  10,  10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10,  10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10,  10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  156, 10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10,  10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10,  10,  10, 10, 198, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  212, 10,  10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 230, 10,  10,  10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10,  252, 10, 10, 10,  10, 10, 258, 10, 10, 10, 10, 263, 10, 10, 10,
+                10, 10,  10,  10,  10,  10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10,  10,  10, 10, 10,  10, 10, 10,  10, 0,  0,  0,  0,   0,  0,  0,
         },
         {
-                0,  147, 0,  0,  0,  0,  0,  8,  8,  10, 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,  35,  35, 0,  38,  0,
-                0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  54, 54, 0,   0,  0,  0,   0,
-                0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71,  71, 71, 71,  71,
-                0,  0,   0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 159, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  200,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 236, 10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  260,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,   0,  0,  0,
+                0,  147, 0,  0,  0,  0,  0,   8,  8,  10, 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,  35,  35, 0,
+                38, 0,   0,  0,  0,  0,  0,   0,  0,  0,  0,  0,   0,  0,  0,  54, 54,  0,  0,
+                0,  0,   0,  0,  0,  0,  0,   0,  0,  0,  0,  0,   0,  71, 71, 71, 71,  71, 71,
+                71, 71,  71, 71, 0,  0,  0,   0,  0,  0,  10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 159, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 221, 10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 245, 10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10,
+                10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10,  0,  0,  0,  0,  0,   0,  0,
         },
         {
-                0,   161, 0,  0,   0,  0,  0,  8,   8,   10,  10,  0,  0,   0,   0,   0,  0,  0,
-                0,   0,   0,  0,   0,  0,  0,  0,   0,   0,   0,   0,  31,  0,   0,   0,  0,  35,
-                35,  0,   38, 0,   50, 46, 43, 0,   0,   0,   0,   0,  0,   50,  0,   0,  0,  54,
-                54,  50,  0,  0,   0,  0,  0,  0,   0,   0,   0,   0,  0,   0,   0,   0,  71, 71,
-                71,  71,  71, 71,  71, 71, 71, 71,  0,   0,   0,   0,  0,   0,   10,  10, 10, 10,
-                91,  10,  10, 10,  10, 10, 10, 10,  10,  10,  10,  10, 10,  10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10, 10, 10, 116, 10,  10,  10,  10, 10,  122, 10,  10, 10, 10,
-                127, 10,  10, 10,  10, 10, 10, 134, 10,  136, 10,  10, 10,  10,  10,  10, 10, 10,
-                10,  146, 10, 148, 10, 10, 10, 10,  10,  10,  10,  10, 10,  10,  10,  10, 10, 10,
-                10,  164, 10, 10,  10, 10, 10, 10,  10,  172, 10,  10, 10,  10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10, 10, 10, 10,  10,  10,  10,  10, 10,  10,  10,  10, 10, 10,
-                199, 10,  10, 10,  10, 10, 10, 10,  10,  208, 10,  10, 10,  212, 10,  10, 10, 10,
-                217, 10,  10, 10,  10, 10, 10, 10,  10,  226, 10,  10, 10,  10,  10,  10, 10, 234,
-                10,  10,  10, 10,  10, 10, 10, 10,  10,  10,  10,  10, 10,  10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10, 10, 10, 10,  261, 10,  263, 10, 10,  266, 10,  10, 10, 10,
-                10,  10,  10, 10,  10, 10, 10, 10,  10,  10,  10,  10, 283, 10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10, 10, 10, 10,  10,  298, 10,  10, 10,  10,  303, 10, 10, 10,
-                307, 10,  10, 10,  10, 10, 0,  0,   0,   0,   0,   0,  0,
+                0,   161, 0,   0,   0,  0,  0,  8,   8,  10,  10, 0,   0,   0,   0,  0,   0,   0,
+                0,   0,   0,   0,   0,  0,  0,  0,   0,  0,   0,  0,   31,  0,   0,  0,   0,   35,
+                35,  0,   38,  0,   50, 46, 43, 0,   0,  0,   0,  0,   0,   50,  0,  0,   0,   54,
+                54,  50,  0,   0,   0,  0,  0,  0,   0,  0,   0,  0,   0,   0,   0,  0,   71,  71,
+                71,  71,  71,  71,  71, 71, 71, 71,  0,  0,   0,  0,   0,   0,   10, 10,  10,  10,
+                91,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10,  10,
+                10,  10,  10,  10,  10, 10, 10, 116, 10, 10,  10, 10,  10,  122, 10, 10,  10,  10,
+                127, 10,  10,  10,  10, 10, 10, 134, 10, 136, 10, 10,  10,  10,  10, 10,  10,  10,
+                10,  146, 10,  148, 10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10,  10,
+                10,  164, 10,  10,  10, 10, 10, 10,  10, 172, 10, 10,  10,  10,  10, 10,  10,  10,
+                10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10,  193, 10,  10, 10,  197, 10,
+                10,  10,  10,  202, 10, 10, 10, 10,  10, 10,  10, 10,  211, 10,  10, 10,  10,  10,
+                10,  10,  219, 10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10,  10,
+                10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 246, 10,  248, 10, 10,  251, 10,
+                10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 268, 10,  10,
+                10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10,  283, 10,  10, 10,  10,  288,
+                10,  10,  10,  292, 10, 10, 10, 10,  10, 0,   0,  0,   0,   0,   0,  0,
         },
         {
-                0,  168, 0,  0,  0,  0,   0,   8,  8,  10, 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,   35,  35,  0,
-                38, 0,   0,  0,  0,  0,   0,   0,  0,  0,  0,  0,  0,   0,  0,  54,  54,  0,   0,
-                0,  0,   0,  0,  0,  0,   0,   0,  0,  0,  0,  0,  0,   71, 71, 73,  71,  71,  71,
-                71, 71,  71, 71, 0,  0,   0,   0,  0,  0,  10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 120, 121, 10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 149, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 184, 10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  264, 265, 10,
-                10, 10,  10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 287, 10, 10, 10, 10,  10,  10, 10, 10, 10, 10, 10,  10, 10, 10,  10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10,  10, 0,  0,  0,  0,  0,   0,  0,
+                0,  168, 0,   0,  0,  0,   0,   8,   8,  10, 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,   35, 35, 0,
+                38, 0,   0,   0,  0,  0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  54,  54, 0,  0,
+                0,  0,   0,   0,  0,  0,   0,   0,   0,  0,  0,  0,  0,  71, 71, 73,  71, 71, 71,
+                71, 71,  71,  71, 0,  0,   0,   0,   0,  0,  10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 120, 121, 10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 149, 10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  179, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 249, 250, 10, 10, 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 272, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
+                10, 10,  10,  10, 10, 10,  10,  10,  10, 10, 10, 10, 0,  0,  0,  0,   0,  0,  0,
         },
         {
-                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 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,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 180,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35,  35, 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,  71, 71, 71, 71,  71, 71,
+                71, 71, 79, 71, 0,  0,  0,  0,  0,  0,  10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 133,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 239, 10, 10, 10, 10, 10, 10,  10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 264, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 285,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 0,  0,  0,  0,  0,   0,  0,
         },
         {
-                0,  178, 0,  0,  0,  0,  0,   8,  8,  10,  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,  35, 35, 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,   71, 71,  71, 71, 71, 71,
-                71, 71,  79, 71, 0,  0,  0,   0,  0,  0,   10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 133,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 181, 10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 254, 10, 10, 10,  10, 10, 10,  10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 279, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10,  10, 300, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10,  10, 0,  0,   0,  0,  0,   0,  0,
+                0,   178, 0,  0,   0,  0,  0,  8,  8,   10,  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,   35,
+                35,  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,   72,  71,
+                71,  71,  71, 76,  71, 71, 71, 71, 0,   0,   0,   0,  0,   0,  10,  10,  89,  10,
+                10,  10,  10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 103, 10, 10,  10,  10,  10,
+                10,  10,  10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10,
+                10,  10,  10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,  143, 10,
+                10,  10,  10, 154, 10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10,
+                10,  10,  10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10,
+                10,  10,  10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10,
+                10,  200, 10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 213, 10,  215, 10,
+                10,  10,  10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 229, 10, 10,  10,  10,  10,
+                10,  10,  10, 10,  10, 10, 10, 10, 10,  244, 10,  10, 10,  10, 10,  10,  10,  10,
+                10,  10,  10, 10,  10, 10, 10, 10, 261, 10,  10,  10, 10,  10, 10,  10,  10,  10,
+                271, 10,  10, 10,  10, 10, 10, 10, 10,  10,  281, 10, 10,  10, 10,  286, 10,  10,
+                10,  290, 10, 10,  10, 10, 10, 10, 10,  0,   0,   0,  0,   0,  0,   0,
         },
         {
-                0,  183, 0,   0,   0,  0,   0,   8,   8,  10,  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,   35,
-                35, 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,   72,  71,
-                71, 71,  71,  76,  71, 71,  71,  71,  0,  0,   0,  0,   0,   0,   10, 10,  89,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  103, 10,  10, 10,  10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10, 10,  10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10, 10,  143, 10,
-                10, 10,  10,  154, 10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10, 10,  10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10, 10,  179, 10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10, 10,  10,  10,
-                10, 10,  201, 10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10,  10, 10,  215, 10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 228, 10,  230, 10, 10,  10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 244, 10, 10,  10,  10,  10, 10,  10,  10,
-                10, 10,  10,  10,  10, 10,  259, 10,  10, 10,  10, 10,  10,  10,  10, 10,  10,  10,
-                10, 10,  10,  10,  10, 276, 10,  10,  10, 10,  10, 10,  10,  10,  10, 286, 10,  10,
-                10, 10,  10,  10,  10, 10,  10,  296, 10, 10,  10, 10,  301, 10,  10, 10,  305, 10,
-                10, 10,  10,  10,  10, 10,  0,   0,   0,  0,   0,  0,   0,
+                0,  9,  0,  0,   0,  0,  0,  8,  8,   10, 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,  35, 35, 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,  71, 71, 71, 71, 71, 71,
+                71, 71, 71, 71,  0,  0,  0,  0,  0,   0,  10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 118, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 237, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10,  10, 10, 10, 10, 10,  10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 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,  71, 71,  71, 71, 71, 71, 71, 71,  71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 118, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 252, 10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  0,  0,  0,  0,  0,  0,   0,
+                0,  184, 0,  0,  0,  0,   0,   8,   8,  10, 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,   35,
+                35, 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,  71,  71,
+                71, 71,  71, 71, 71, 71,  71,  71,  0,  0,  0,  0,   0,  0,  10, 10, 10,  10,
+                10, 92,  10, 94, 10, 10,  10,  98,  10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 10,  10,  10,  10, 10, 10, 10,  10, 10, 10, 10, 128, 10,
+                10, 10,  10, 10, 10, 10,  10,  10,  10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 10,  10,  152, 10, 10, 10, 10,  10, 10, 10, 10, 10,  162,
+                10, 10,  10, 10, 10, 10,  173, 170, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 10,  10,  10,  10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 204, 205, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 10,  10,  224, 10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 10,  10,  10,  10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 10,  10,  10,  10, 10, 10, 10,  10, 10, 10, 10, 10,  10,
+                10, 10,  10, 10, 10, 10,  10,  278, 10, 10, 10, 282, 10, 10, 10, 10, 287, 10,
+                10, 10,  10, 10, 10, 10,  295, 10,  10, 0,  0,  0,   0,  0,  0,  0,
         },
         {
-                0,  189, 0,  0,  0,  0,   0,  8,   8,  10,  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,  35,  35,  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,  71, 71, 71, 71,  71,  71,
-                71, 71,  71, 71, 0,  0,   0,  0,   0,  0,   10,  10,  10, 10, 10, 92, 10,  94,  10,
-                10, 10,  98, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 10,  128, 10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10, 10, 10, 10,  10,  152,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 162, 10,  10,  10, 10, 10, 10, 173, 170, 10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 219, 220, 10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 10,  239, 10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 10,  10, 10,  10,  10,  10, 10, 10, 10, 10,  10,  10,
-                10, 10,  10, 10, 10, 10,  10, 293, 10, 10,  10,  297, 10, 10, 10, 10, 302, 10,  10,
-                10, 10,  10, 10, 10, 310, 10, 10,  0,  0,   0,   0,   0,  0,  0,
+                0,  9,  0,  0,  0,  0,  0,  8,  8,   10, 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,  35, 35, 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,  71, 71,  71, 71, 71, 71,
+                71, 71, 71, 71, 0,  0,  0,  0,  0,   0,  10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 167, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 275, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 0,  0,  0,   0,  0,  0,  0,
         },
         {
-                0,  198, 0,   0,  0,  0,  0,   8,  8,  10,  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,  35, 35, 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,   71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,   0,   0,  0,  0,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 167, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  203, 10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 290, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10, 10, 10, 10,  10, 10, 10,  10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  190, 0,  0,   0,  0,  0,   8,   8,   10,  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,  35, 35, 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,  71,  71, 71, 71, 71, 71,
+                71, 71,  71, 71,  0,  0,  0,   0,   0,   0,   10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  10,  104, 10,  10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  10,  10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 139,
+                10, 10,  10, 137, 10, 10, 10,  10,  10,  10,  144, 10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  10,  10,  165, 10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  180, 10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  10,  10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  217, 10,  10,  10,  10, 10, 223, 10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 235, 10,  10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  10,  10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 270, 10, 10, 10,  10,  10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10,
+                10, 10,  10, 10,  10, 10, 10,  10,  294, 10,  10,  10, 0,  0,   0,  0,  0,  0,  0,
         },
         {
-                0,  205, 0,   0,   0,   0,  0,  8,  8,   10,  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,  35, 35, 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,   71, 71, 71, 71, 71, 71,
-                71, 71,  71,  71,  0,   0,  0,  0,  0,   0,   10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  10,  10, 10, 10, 104, 10,  10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  10,  10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10, 10, 10, 139,
-                10, 10,  10,  137, 10,  10, 10, 10, 10,  10,  144, 10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  10,  10, 10, 10, 10,  165, 10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  10,  10, 10, 10, 10,  10,  10,  10, 185, 10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  10,  10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  10,  10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  232, 10,  10, 10, 10, 10,  238, 10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  250, 10,  10,  10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  10,  10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10, 10, 10, 285,
-                10, 10,  10,  10,  10,  10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10, 10, 10, 10,
-                10, 10,  10,  10,  309, 10, 10, 10, 0,   0,   0,   0,  0,   0,  0,
+                0,   206, 0,   0,   0,   0,   0,   8,  8,  10, 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,   35,
+                35,  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,  71,  71,
+                71,  71,  71,  71,  71,  71,  71,  71, 0,  0,  0,   0,  0,   0,  10, 10, 10,  10,
+                10,  10,  10,  10,  95,  10,  10,  10, 10, 10, 10,  10, 108, 10, 10, 10, 10,  10,
+                10,  10,  10,  10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10, 10, 132, 10,
+                10,  10,  10,  10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  10,
+                10,  10,  10,  160, 10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  10,
+                10,  10,  10,  10,  10,  10,  176, 10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  10,
+                181, 10,  10,  10,  10,  10,  187, 10, 10, 10, 191, 10, 10,  10, 10, 10, 10,  10,
+                10,  10,  10,  10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  216,
+                10,  10,  10,  10,  10,  222, 10,  10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  10,
+                10,  10,  10,  10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  10,
+                10,  10,  10,  10,  10,  10,  10,  10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  10,
+                10,  10,  273, 10,  10,  10,  277, 10, 10, 10, 10,  10, 10,  10, 10, 10, 10,  10,
+                10,  10,  10,  10,  293, 10,  10,  10, 10, 0,  0,   0,  0,   0,  0,  0,
         },
         {
-                0,  221, 0,   0,   0,  0,   0,   8,   8,  10,  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,   35,
-                35, 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,  71,  71,
-                71, 71,  71,  71,  71, 71,  71,  71,  0,  0,   0,  0,   0,   0,  10,  10, 10,  10,
-                10, 10,  10,  10,  95, 10,  10,  10,  10, 10,  10, 10,  108, 10, 10,  10, 10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 10,  10, 132, 10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 10,  10, 10,  10,
-                10, 10,  10,  160, 10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 10,  10, 10,  10,
-                10, 10,  10,  10,  10, 10,  176, 10,  10, 10,  10, 10,  10,  10, 10,  10, 10,  10,
-                10, 10,  10,  10,  10, 186, 10,  10,  10, 195, 10, 192, 10,  10, 10,  10, 10,  10,
-                10, 10,  10,  10,  10, 10,  10,  206, 10, 10,  10, 10,  10,  10, 10,  10, 10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 231, 10, 10,  10,
-                10, 10,  237, 10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 10,  10, 10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 10,  10, 10,  10,
-                10, 10,  10,  10,  10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 10,  10, 10,  288,
-                10, 10,  10,  292, 10, 10,  10,  10,  10, 10,  10, 10,  10,  10, 10,  10, 10,  10,
-                10, 308, 10,  10,  10, 10,  0,   0,   0,  0,   0,  0,   0,
+                0,  209, 0,  0,  0,  0,   0,  8,  8,  10, 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,  35, 35, 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,  71, 71, 71, 71, 71, 71,
+                71, 71,  71, 71, 0,  0,   0,  0,  0,  0,  10, 88, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 192, 10, 10, 10, 196, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  224, 0,  0,   0,  0,  0,   8,  8,  10, 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,  35, 35,  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,  71,  71, 71, 71, 71, 71, 71,  71, 71, 71,
-                0,  0,   0,  0,   0,  0,  10,  88, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 182, 10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 197, 10, 10, 10,
-                10, 10,  10, 204, 10, 10, 207, 10, 10, 10, 211, 10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10, 10, 10,
-                10, 10,  10, 10,  10, 10, 10,  10, 10, 10, 10,  10, 0,  0,  0,  0,  0,   0,  0,
+                0,   218, 0,  0,   0,  0,   0,  8,   8,   10, 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,  35, 35, 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,  71, 71, 71, 71, 71, 71,
+                71,  71,  71, 71,  0,  0,   0,  0,   0,   0,  10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10,  10,  10, 10,  10, 10,  10, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                115, 10,  10, 10,  10, 10,  10, 10,  123, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10,  135, 10, 10,  10, 10,  10, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10,  10,  10, 10,  10, 158, 10, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10,  10,  10, 10,  10, 177, 10, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10,  10,  10, 194, 10, 10,  10, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                210, 10,  10, 10,  10, 10,  10, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 228,
+                10,  10,  10, 10,  10, 234, 10, 10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10,  10,  10, 10,  10, 10,  10, 10,  256, 10, 10, 10, 10, 10, 10, 10, 10, 10, 266,
+                10,  10,  10, 10,  10, 10,  10, 274, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 289,
+                10,  10,  10, 10,  10, 10,  10, 10,  10,  10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,   233, 0,  0,   0,   0,   0,  8,  8,   10, 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,   35, 35, 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,  71, 71,  71,  71, 71, 71,
-                71,  71,  71, 71,  0,   0,   0,  0,  0,   0,  10, 10, 10, 10, 10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10, 10, 10,
-                115, 10,  10, 10,  10,  10,  10, 10, 123, 10, 10, 10, 10, 10, 10,  10,  10, 10, 10,
-                10,  135, 10, 10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10,  158, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10,  177, 10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10, 10, 10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10, 10, 209,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  225, 10, 10, 10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 243, 10,  10, 10, 10,
-                10,  249, 10, 10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10, 10, 10,
-                10,  10,  10, 10,  271, 10,  10, 10, 10,  10, 10, 10, 10, 10, 281, 10,  10, 10, 10,
-                10,  10,  10, 289, 10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 304, 10,  10, 10, 10,
-                10,  10,  10, 10,  10,  10,  10, 10, 0,   0,  0,  0,  0,  0,  0,
+                0,   236, 0,  0,   0,   0,  0,   8,  8,   10, 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,  35,
+                35,  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,   74, 71,
+                71,  71,  71, 71,  71,  71, 71,  71, 0,   0,  0,   0,  0,  0,   10,  10,  10, 10,
+                10,  10,  10, 10,  10,  10, 10,  10, 10,  10, 10,  10, 10, 10,  10,  10,  10, 10,
+                10,  10,  10, 10,  10,  10, 10,  10, 10,  10, 10,  10, 10, 10,  10,  10,  10, 126,
+                10,  10,  10, 130, 131, 10, 10,  10, 10,  10, 10,  10, 10, 140, 10,  10,  10, 10,
+                10,  10,  10, 10,  10,  10, 10,  10, 10,  10, 155, 10, 10, 10,  10,  10,  10, 10,
+                163, 10,  10, 10,  10,  10, 10,  10, 171, 10, 10,  10, 10, 10,  10,  10,  10, 10,
+                10,  10,  10, 10,  10,  10, 10,  10, 10,  10, 10,  10, 10, 10,  195, 10,  10, 10,
+                10,  10,  10, 10,  10,  10, 10,  10, 10,  10, 10,  10, 10, 10,  10,  214, 10, 10,
+                10,  10,  10, 226, 10,  10, 10,  10, 10,  10, 10,  10, 10, 10,  10,  10,  10, 10,
+                10,  10,  10, 10,  10,  10, 241, 10, 243, 10, 10,  10, 10, 10,  10,  10,  10, 10,
+                10,  254, 10, 10,  10,  10, 10,  10, 10,  10, 10,  10, 10, 10,  10,  10,  10, 10,
+                10,  10,  10, 10,  10,  10, 10,  10, 10,  10, 10,  10, 10, 10,  10,  10,  10, 10,
+                10,  10,  10, 10,  10,  10, 10,  10, 10,  0,  0,   0,  0,  0,   0,   0,
         },
         {
-                0,   251, 0,  0,   0,   0,   0,  8,  8,   10, 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,   35,
-                35,  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,  74,  71,
-                71,  71,  71, 71,  71,  71,  71, 71, 0,   0,  0,   0,   0,   0,   10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10, 10, 10,  126,
-                10,  10,  10, 130, 131, 10,  10, 10, 10,  10, 10,  10,  10,  140, 10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 155, 10,  10,  10,  10, 10, 10,  10,
-                163, 10,  10, 10,  10,  10,  10, 10, 171, 10, 10,  10,  10,  10,  10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  210, 10,  10,  10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  10,  229, 10,  10, 10, 10,  10,
-                241, 10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10, 10, 10,  10,
-                10,  10,  10, 256, 10,  258, 10, 10, 10,  10, 10,  10,  10,  10,  10, 10, 269, 10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10, 10, 10,  10,
-                10,  10,  10, 10,  10,  10,  0,  0,  0,   0,  0,   0,   0,
+                0,   265, 0,   0,   0,  0,  0,   8,  8,   10,  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,  35,
+                35,  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,  71, 71,
+                71,  71,  71,  71,  77, 71, 71,  71, 0,   0,   0,   0,   0,   0,   10,  10, 10, 10,
+                10,  10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10,  10,  10,  10, 10, 10,
+                10,  110, 10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  10,  10,  10,  10, 10, 10,
+                10,  10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  138, 10,  142, 141, 10, 10, 10,
+                10,  10,  10,  10,  10, 10, 10,  10, 153, 10,  10,  10,  10,  10,  10,  10, 10, 10,
+                10,  10,  10,  10,  10, 10, 10,  10, 10,  10,  10,  10,  175, 10,  10,  10, 10, 10,
+                10,  10,  183, 10,  10, 10, 10,  10, 189, 10,  10,  10,  10,  10,  10,  10, 10, 10,
+                199, 10,  10,  10,  10, 10, 10,  10, 10,  208, 10,  10,  10,  10,  10,  10, 10, 10,
+                10,  10,  10,  232, 10, 10, 10,  10, 10,  10,  227, 10,  10,  10,  231, 10, 10, 10,
+                10,  10,  255, 10,  10, 10, 10,  10, 10,  10,  10,  10,  10,  10,  10,  10, 10, 10,
+                253, 10,  10,  10,  10, 10, 259, 10, 10,  262, 10,  10,  10,  10,  10,  10, 10, 10,
+                10,  10,  10,  10,  10, 10, 10,  10, 10,  280, 10,  10,  10,  10,  10,  10, 10, 10,
+                10,  10,  291, 10,  10, 10, 10,  10, 10,  0,   0,   0,   0,   0,   0,   0,
         },
         {
-                0,   280, 0,  0,   0,  0,  0,   8,   8,   10, 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,  35,
-                35,  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,   71, 71,
-                71,  71,  71, 71,  77, 71, 71,  71,  0,   0,  0,  0,   0,   0,   10,  10,  10, 10,
-                10,  10,  10, 10,  10, 10, 10,  10,  10,  10, 10, 10,  10,  10,  10,  10,  10, 10,
-                10,  110, 10, 10,  10, 10, 10,  10,  10,  10, 10, 10,  10,  10,  10,  10,  10, 10,
-                10,  10,  10, 10,  10, 10, 10,  10,  10,  10, 10, 138, 10,  142, 141, 10,  10, 10,
-                10,  10,  10, 10,  10, 10, 10,  10,  153, 10, 10, 10,  10,  10,  10,  10,  10, 10,
-                10,  10,  10, 10,  10, 10, 10,  10,  10,  10, 10, 10,  175, 10,  10,  10,  10, 10,
-                10,  10,  10, 10,  10, 10, 10,  188, 10,  10, 10, 10,  10,  194, 10,  10,  10, 10,
-                10,  10,  10, 10,  10, 10, 10,  10,  10,  10, 10, 10,  10,  10,  10,  214, 10, 10,
-                10,  10,  10, 10,  10, 10, 223, 10,  10,  10, 10, 10,  10,  10,  10,  10,  10, 10,
-                247, 10,  10, 10,  10, 10, 10,  242, 10,  10, 10, 246, 10,  10,  10,  10,  10, 270,
-                10,  10,  10, 10,  10, 10, 10,  10,  10,  10, 10, 10,  10,  10,  10,  268, 10, 10,
-                10,  10,  10, 274, 10, 10, 277, 10,  10,  10, 10, 10,  10,  10,  10,  10,  10, 10,
-                10,  10,  10, 10,  10, 10, 295, 10,  10,  10, 10, 10,  10,  10,  10,  10,  10, 306,
-                10,  10,  10, 10,  10, 10, 0,   0,   0,   0,  0,  0,   0,
+                0,   269, 0,  0,  0,   0,  0,  8,  8,  10,  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,  35,  35,  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,  71,  71, 71, 71,  71,  71,
+                71,  71,  71, 71, 0,   0,  0,  0,  0,  0,   10,  10,  10, 10,  10, 10, 10,  10,  10,
+                10,  10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 109, 10, 10, 10,  10,  10,
+                119, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10,  10,  10,
+                10,  10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  145, 10, 10,  10, 10, 10,  151, 10,
+                10,  10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 166, 10, 10, 10,  10,  10,
+                10,  10,  10, 10, 10,  10, 10, 10, 10, 10,  182, 10,  10, 10,  10, 10, 188, 10,  10,
+                203, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 207, 10,  10,
+                10,  10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10,  10,  10,
+                10,  10,  10, 10, 233, 10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10,  10,  10,
+                10,  10,  10, 10, 10,  10, 10, 10, 10, 257, 10,  10,  10, 10,  10, 10, 10,  10,  10,
+                267, 10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10, 10,  10,  10,
+                10,  10,  10, 10, 10,  10, 10, 10, 10, 10,  10,  10,  0,  0,   0,  0,  0,   0,   0,
         },
         {
-                0,   284, 0,   0,  0,  0,   0,  8,  8,  10, 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,   35, 35,  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,   71,  71, 71,  71, 71,  71,
-                71,  71,  71,  71, 0,  0,   0,  0,  0,  0,  10, 10,  10,  10,  10, 10,  10, 10,  10,
-                10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  109, 10, 10,  10, 10,  10,
-                119, 10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,
-                10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 145, 10,  10,  10, 10,  10, 151, 10,
-                10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  166, 10, 10,  10, 10,  10,
-                10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10, 187, 10, 10,  10,
-                10,  10,  193, 10, 10, 10,  10, 10, 10, 10, 10, 202, 10,  10,  10, 218, 10, 10,  10,
-                10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  222, 10,  10, 10,  10, 10,  10,
-                10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,
-                248, 10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,
-                10,  10,  10,  10, 10, 272, 10, 10, 10, 10, 10, 10,  10,  10,  10, 282, 10, 10,  10,
-                10,  10,  10,  10, 10, 10,  10, 10, 10, 10, 10, 10,  10,  10,  10, 10,  10, 10,  10,
-                10,  10,  10,  10, 10, 10,  10, 10, 0,  0,  0,  0,   0,   0,   0,
+                0,  276, 0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 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,  71, 71, 71, 71, 71, 71,
+                71, 71,  71, 71, 0,  0,  0,  0,  0,  0,  10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 201, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  291, 0,  0,  0,  0,  0,  8,  8,  10, 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,  35,  35, 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,  71, 71, 71, 71, 71, 71,  71, 71, 71, 71,
-                0,  0,   0,  0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 216, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,   0,  0,  0,
+                0,  284, 0,  0,  0,  0,  0,  8,  8,   10, 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,  35, 35, 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,  71, 71, 71, 71, 75, 71,
+                71, 71,  71, 71, 0,  0,  0,  0,  0,   0,  10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 260, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10,  10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  299, 0,  0,  0,  0,  0,  8,  8,  10, 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,  35,  35, 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,  71, 71,  71, 71, 75, 71,  71, 71, 71, 71,
-                0,  0,   0,  0,  0,  0,  10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 196, 10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 275, 10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10, 10, 10, 10,
-                10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  0,  0,  0,  0,   0,  0,  0,
+                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 0,  38, 0,  53, 0,
+                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+                0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0,  0,  0,  0,
+                0,  0,  10, 10, 10, 90, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 0,  38, 0,
-                53, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 90, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,
+                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,   35, 35, 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,  71, 71,  71,  71, 71, 71,
+                71, 71, 71, 71, 0,  0,  0,  0,  0,  0,  10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 186, 10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  225, 10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10,  10,  10, 10, 10,
+                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 296, 10, 0,  0,  0,   0,   0,  0,  0,
         },
         {
-                0,  9,  0,  0,  0,  0,  0,  8,  8,  10, 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,  35, 35, 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,  71,  71, 71, 71, 71, 71, 71, 71, 71, 71,
-                0,  0,  0,  0,  0,  0,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 191, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 240,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 311, 10, 0,  0,  0,  0,  0,  0,  0,
+                0, 297, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
+                0, 298, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 300, 0, 0, 0, 0, 0,
         },
         {
-                0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 315, 0, 0, 0, 0, 0,
+                0, 302, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
-        },
-        {
-                0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 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,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
+                0, 303, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 35, 35, 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, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,  0, 0, 0, 0, 0,
         },
 };
 
-static int8_t accepts[319] = {
-        -1, -1, 98, 98, 101, 72, 78, 101, 46, 45, 45, 62, 87, 67, 71, 95,  92, 48, 49, 60, 85, 58,
-        56, 83, 55, 59, 57,  84, 97, 54,  1,  -1, -1, 1,  61, -1, -1, 100, 99, 86, 2,  1,  1,  -1,
-        -1, 1,  -1, -1, 1,   2,  -1, -1,  1,  -1, 2,  2,  75, 74, 96, 80,  63, 88, 82, 76, 77, 79,
-        81, 64, 89, 73, 101, 47, 47, 6,   47, 47, 47, 47, 47, 12, 52, 53,  66, 91, 70, 94, 45, 45,
-        45, 45, 45, 45, 45,  45, 45, 45,  45, 45, 45, 45, 45, 37, 45, 45,  45, 45, 45, 38, 45, 45,
-        45, 45, 45, 39, 45,  45, 45, 45,  15, 45, 45, 45, 45, 35, 45, 45,  45, 13, 45, 45, 45, 44,
-        45, 45, 45, 45, 45,  45, 32, 45,  45, 24, 45, 45, 45, 45, 16, 45,  45, 45, 45, 45, 45, 14,
-        45, 45, 45, 45, 45,  17, 10, 45,  45, 45, 7,  45, 45, 43, 45, 45,  45, 45, 4,  45, 45, 28,
-        45, 8,  45, 45, 45,  45, 27, 45,  5,  20, 45, 45, 22, 45, 45, 45,  45, 45, 41, 45, 45, 25,
-        45, 45, 45, 45, 45,  45, 26, 45,  45, 45, 45, 45, 45, 45, 45, 45,  45, 45, 45, 29, 45, 45,
-        19, 45, 45, 21, 45,  45, 45, 45,  45, 45, 45, 45, 42, 45, 45, 45,  45, 45, 45, 45, 30, 45,
-        45, 45, 45, 45, 34,  45, 45, 45,  18, 45, 45, 45, 45, 45, 45, 45,  45, 45, 45, 45, 45, 45,
-        45, 45, 45, 45, 45,  36, 45, 45,  45, 45, 40, 45, 45, 45, 45, 11,  45, 45, 45, 3,  45, 45,
-        45, 45, 45, 45, 23,  45, 45, 45,  45, 45, 45, 45, 33, 45, 45, 45,  45, 9,  45, 45, 45, 45,
-        45, 45, 45, 31, 50,  65, 90, 69,  93, 51, 68,
+static int8_t accepts[304] = {
+        -1, -1, 95, 95, 98, 69, 75, 98, 43, 42, 42, 59, 84, 64, 68, 92, 89, 45, 46, 57, 82, 55,
+        53, 80, 52, 56, 54, 81, 94, 51, 1,  -1, -1, 1,  58, -1, -1, 97, 96, 83, 2,  1,  1,  -1,
+        -1, 1,  -1, -1, 1,  2,  -1, -1, 1,  -1, 2,  2,  72, 71, 93, 77, 60, 85, 79, 73, 74, 76,
+        78, 61, 86, 70, 98, 44, 44, 6,  44, 44, 44, 44, 44, 12, 49, 50, 63, 88, 67, 91, 42, 42,
+        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 34, 42, 42, 42, 42, 42, 35, 42, 42,
+        42, 42, 42, 36, 42, 42, 42, 42, 15, 42, 42, 42, 42, 32, 42, 42, 42, 13, 42, 42, 42, 41,
+        42, 42, 42, 42, 42, 42, 29, 42, 42, 24, 42, 42, 42, 42, 16, 42, 42, 42, 42, 42, 42, 14,
+        42, 42, 42, 42, 42, 17, 10, 42, 42, 42, 7,  42, 42, 40, 42, 42, 42, 42, 4,  42, 42, 25,
+        42, 8,  42, 5,  20, 42, 42, 22, 42, 42, 42, 42, 42, 38, 42, 42, 42, 42, 42, 42, 42, 42,
+        42, 42, 42, 42, 26, 42, 42, 19, 42, 42, 21, 42, 42, 42, 42, 42, 42, 42, 42, 39, 42, 42,
+        42, 42, 42, 42, 42, 27, 42, 42, 42, 42, 42, 31, 42, 42, 42, 18, 42, 42, 42, 42, 42, 42,
+        42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 33, 42, 42, 42, 42, 37, 42, 42, 42, 42,
+        11, 42, 42, 42, 3,  42, 42, 42, 42, 42, 42, 23, 42, 42, 42, 42, 42, 42, 42, 30, 42, 42,
+        42, 42, 9,  42, 42, 42, 42, 42, 42, 42, 28, 47, 62, 87, 66, 90, 48, 65,
 };
 
 Token Lexer::next() {
diff --git a/src/sksl/SkSLLexer.h b/src/sksl/SkSLLexer.h
index bffaa6e..9a16696 100644
--- a/src/sksl/SkSLLexer.h
+++ b/src/sksl/SkSLLexer.h
@@ -65,12 +65,6 @@
         UNIFORM,
 #undef CONST
         CONST,
-#undef LOWP
-        LOWP,
-#undef MEDIUMP
-        MEDIUMP,
-#undef HIGHP
-        HIGHP,
 #undef FLAT
         FLAT,
 #undef NOPERSPECTIVE
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index 6d8e62e..a85fe09 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -943,18 +943,6 @@
                 flags |= Modifiers::kIn_Flag;
                 flags |= Modifiers::kOut_Flag;
                 break;
-            case Token::LOWP:
-                this->nextToken();
-                flags |= Modifiers::kLowp_Flag;
-                break;
-            case Token::MEDIUMP:
-                this->nextToken();
-                flags |= Modifiers::kMediump_Flag;
-                break;
-            case Token::HIGHP:
-                this->nextToken();
-                flags |= Modifiers::kHighp_Flag;
-                break;
             case Token::FLAT:
                 this->nextToken();
                 flags |= Modifiers::kFlat_Flag;
@@ -1047,10 +1035,7 @@
             this->nextToken();
             return std::unique_ptr<ASTStatement>(new ASTBlock(start.fOffset,
                                                      std::vector<std::unique_ptr<ASTStatement>>()));
-        case Token::CONST:   // fall through
-        case Token::HIGHP:   // fall through
-        case Token::MEDIUMP: // fall through
-        case Token::LOWP: {
+        case Token::CONST: {
             auto decl = this->varDeclarations();
             if (!decl) {
                 return nullptr;
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.cpp b/src/sksl/SkSLSPIRVCodeGenerator.cpp
index 1804ecb..c03b1ce 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.cpp
+++ b/src/sksl/SkSLSPIRVCodeGenerator.cpp
@@ -1884,9 +1884,14 @@
         this->writeInstruction(ifUInt, this->getType(resultType), result, lhs, rhs, out);
     } else if (operandType == *fContext.fBool_Type) {
         this->writeInstruction(ifBool, this->getType(resultType), result, lhs, rhs, out);
+        return result; // skip RelaxedPrecision check
     } else {
         ABORT("invalid operandType: %s", operandType.description().c_str());
     }
+    if (resultType == operandType && !resultType.highPrecision()) {
+        this->writeInstruction(SpvOpDecorate, result, SpvDecorationRelaxedPrecision,
+                               fDecorationBuffer);
+    }
     return result;
 }
 
@@ -2712,9 +2717,8 @@
     return result;
 }
 
-void SPIRVCodeGenerator::writePrecisionModifier(const Modifiers& modifiers, SpvId id) {
-    if ((modifiers.fFlags & Modifiers::kLowp_Flag) |
-        (modifiers.fFlags & Modifiers::kMediump_Flag)) {
+void SPIRVCodeGenerator::writePrecisionModifier(const Type& type, SpvId id) {
+    if (!type.highPrecision()) {
         this->writeInstruction(SpvOpDecorate, id, SpvDecorationRelaxedPrecision, fDecorationBuffer);
     }
 }
@@ -2778,7 +2782,7 @@
         }
         this->writeInstruction(SpvOpVariable, type, id, storageClass, fConstantBuffer);
         this->writeInstruction(SpvOpName, id, var->fName, fNameBuffer);
-        this->writePrecisionModifier(var->fModifiers, id);
+        this->writePrecisionModifier(var->fType, id);
         if (varDecl.fValue) {
             SkASSERT(!fCurrentBlock);
             fCurrentBlock = -1;
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.h b/src/sksl/SkSLSPIRVCodeGenerator.h
index 02adfa5..3681cfe 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.h
+++ b/src/sksl/SkSLSPIRVCodeGenerator.h
@@ -120,7 +120,7 @@
     SpvId getPointerType(const Type& type, const MemoryLayout& layout,
                          SpvStorageClass_ storageClass);
 
-    void writePrecisionModifier(const Modifiers& modifiers, SpvId id);
+    void writePrecisionModifier(const Type& type, SpvId id);
 
     std::vector<SpvId> getAccessChain(const Expression& expr, OutputStream& out);
 
diff --git a/src/sksl/ir/SkSLModifiers.h b/src/sksl/ir/SkSLModifiers.h
index c8ece61..d95331e 100644
--- a/src/sksl/ir/SkSLModifiers.h
+++ b/src/sksl/ir/SkSLModifiers.h
@@ -21,22 +21,19 @@
         kConst_Flag          = 1 <<  0,
         kIn_Flag             = 1 <<  1,
         kOut_Flag            = 1 <<  2,
-        kLowp_Flag           = 1 <<  3,
-        kMediump_Flag        = 1 <<  4,
-        kHighp_Flag          = 1 <<  5,
-        kUniform_Flag        = 1 <<  6,
-        kFlat_Flag           = 1 <<  7,
-        kNoPerspective_Flag  = 1 <<  8,
-        kReadOnly_Flag       = 1 <<  9,
-        kWriteOnly_Flag      = 1 << 10,
-        kCoherent_Flag       = 1 << 11,
-        kVolatile_Flag       = 1 << 12,
-        kRestrict_Flag       = 1 << 13,
-        kBuffer_Flag         = 1 << 14,
-        kHasSideEffects_Flag = 1 << 15,
-        kPLS_Flag            = 1 << 16,
-        kPLSIn_Flag          = 1 << 17,
-        kPLSOut_Flag         = 1 << 18,
+        kUniform_Flag        = 1 <<  3,
+        kFlat_Flag           = 1 <<  4,
+        kNoPerspective_Flag  = 1 <<  5,
+        kReadOnly_Flag       = 1 <<  6,
+        kWriteOnly_Flag      = 1 <<  7,
+        kCoherent_Flag       = 1 <<  8,
+        kVolatile_Flag       = 1 <<  9,
+        kRestrict_Flag       = 1 << 10,
+        kBuffer_Flag         = 1 << 11,
+        kHasSideEffects_Flag = 1 << 12,
+        kPLS_Flag            = 1 << 13,
+        kPLSIn_Flag          = 1 << 14,
+        kPLSOut_Flag         = 1 << 15,
     };
 
     Modifiers()
@@ -55,15 +52,6 @@
         if (fFlags & kConst_Flag) {
             result += "const ";
         }
-        if (fFlags & kLowp_Flag) {
-            result += "lowp ";
-        }
-        if (fFlags & kMediump_Flag) {
-            result += "mediump ";
-        }
-        if (fFlags & kHighp_Flag) {
-            result += "highp ";
-        }
         if (fFlags & kFlat_Flag) {
             result += "flat ";
         }
diff --git a/src/sksl/ir/SkSLType.h b/src/sksl/ir/SkSLType.h
index b8e336d..b9cbb50 100644
--- a/src/sksl/ir/SkSLType.h
+++ b/src/sksl/ir/SkSLType.h
@@ -116,14 +116,15 @@
     }
 
     // Create a scalar type.
-    Type(const char* name, NumberKind numberKind, int priority)
+    Type(const char* name, NumberKind numberKind, int priority, bool highPrecision = false)
     : INHERITED(-1, kType_Kind, StringFragment())
     , fNameString(name)
     , fTypeKind(kScalar_Kind)
     , fNumberKind(numberKind)
     , fPriority(priority)
     , fColumns(1)
-    , fRows(1) {
+    , fRows(1)
+    , fHighPrecision(highPrecision) {
         fName.fChars = fNameString.c_str();
         fName.fLength = fNameString.size();
     }
@@ -372,6 +373,13 @@
         return fIsSampled;
     }
 
+    bool highPrecision() const {
+        if (fComponentType) {
+            return fComponentType->highPrecision();
+        }
+        return fHighPrecision;
+    }
+
     /**
      * Returns the corresponding vector or matrix type with the specified number of columns and
      * rows.
@@ -396,6 +404,7 @@
     bool fIsArrayed = false;
     bool fIsMultisampled = false;
     bool fIsSampled = false;
+    bool fHighPrecision = false;
 };
 
 } // namespace
diff --git a/src/sksl/lex/sksl.lex b/src/sksl/lex/sksl.lex
index 20ace80..3ed96fc 100644
--- a/src/sksl/lex/sksl.lex
+++ b/src/sksl/lex/sksl.lex
@@ -22,9 +22,6 @@
 INOUT          = "inout"
 UNIFORM        = "uniform"
 CONST          = "const"
-LOWP           = "lowp"
-MEDIUMP        = "mediump"
-HIGHP          = "highp"
 FLAT           = "flat"
 NOPERSPECTIVE  = "noperspective"
 READONLY       = "readonly"
diff --git a/tests/SkSLFPTest.cpp b/tests/SkSLFPTest.cpp
index 3c5476c..a046e1a 100644
--- a/tests/SkSLFPTest.cpp
+++ b/tests/SkSLFPTest.cpp
@@ -177,7 +177,7 @@
          },
          {
             "fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "
-                                                         "kDefault_GrSLPrecision, \"color\");",
+                                                         "\"color\");",
          });
 }
 
@@ -196,7 +196,7 @@
          },
          {
             "fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "
-                                                         "kDefault_GrSLPrecision, \"color\");",
+                                                         "\"color\");",
             "pdman.set4fv(fColorVar, 1, reinterpret_cast<const float*>(&(_outer.color())));"
          });
 }
@@ -214,7 +214,7 @@
          },
          {
             "fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "
-                                                         "kDefault_GrSLPrecision, \"color\");",
+                                                         "\"color\");",
             "pdman.set4fv(fColorVar, 1, (_outer.color()).vec());"
          });
 }
@@ -235,7 +235,7 @@
          {
             "SkRect fColorPrev = SkRect::MakeEmpty();",
             "fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "
-                                                         "kDefault_GrSLPrecision, \"color\");",
+                                                         "\"color\");",
             "const SkRect& colorValue = _outer.color();",
             "if (fColorPrev.isEmpty() || fColorPrev != colorValue) {",
             "fColorPrev = colorValue;",
@@ -257,7 +257,7 @@
          },
          {
             "fPointVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf2_GrSLType, "
-                                                         "kDefault_GrSLPrecision, \"point\");",
+                                                         "\"point\");",
             "const SkPoint& pointValue = _outer.point();",
             "pdman.set2f(fPointVar, pointValue.fX, pointValue.fY);"
          });
@@ -285,7 +285,7 @@
             "auto test = _outer.test();",
             "if (test) {",
             "fColorVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, "
-                                                         "kDefault_GrSLPrecision, \"color\");",
+                                                         "\"color\");",
             "if (fColorVar.isValid()) {",
             "const SkPMColor4f& colorValue = _outer.color();",
             "if (fColorPrev != colorValue) {",