added SkSL support for all blend mode layouts

Bug: skia:
Change-Id: Id39c068b15d0ae51520dc2169cdbf21402a43f69
Reviewed-on: https://skia-review.googlesource.com/76200
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/sksl/SkSLLayoutLexer.cpp b/src/sksl/SkSLLayoutLexer.cpp
index a8f31b8..5a4e23f 100644
--- a/src/sksl/SkSLLayoutLexer.cpp
+++ b/src/sksl/SkSLLayoutLexer.cpp
@@ -18,341 +18,510 @@
         1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 1, 1, 1,  1,  1,  1,  1,  1,  1,
         1,  1,  1,  1,  1,  1,  1,  3,  1,  4,  5,  6,  7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
         17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 1, 1, 1, 1,  1};
-static int16_t transitions[29][212] = {
+static int16_t transitions[29][326] = {
         {
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         },
         {
-                0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         },
         {
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         },
         {
-                0, 2, 0,   0,  0,   0, 0,  0, 0,   0, 0,  0, 0, 14, 0,   0, 0,   0, 0, 0, 0,   22,
-                0, 0, 0,   26, 0,   0, 0,  0, 0,   0, 0,  0, 0, 0,  0,   0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0,   0,  0,   0, 0,  0, 0,   0, 55, 0, 0, 0,  0,   0, 0,   0, 0, 0, 0,   66,
-                0, 0, 0,   0,  0,   0, 0,  0, 0,   0, 0,  0, 0, 0,  0,   0, 0,   0, 0, 0, 0,   88,
-                0, 0, 0,   0,  0,   0, 95, 0, 0,   0, 0,  0, 0, 0,  0,   0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0,   0,  115, 0, 0,  0, 0,   0, 0,  0, 0, 0,  0,   0, 0,   0, 0, 0, 0,   0,
-                0, 0, 135, 0,  0,   0, 0,  0, 141, 0, 0,  0, 0, 0,  0,   0, 0,   0, 0, 0, 153, 0,
-                0, 0, 0,   0,  0,   0, 0,  0, 0,   0, 0,  0, 0, 0,  0,   0, 171, 0, 0, 0, 0,   0,
-                0, 0, 0,   0,  0,   0, 0,  0, 0,   0, 0,  0, 0, 0,  191, 0, 0,   0, 0, 0, 0,   198,
-                0, 0, 0,   0,  0,   0, 0,  0, 0,   0, 0,  0, 0, 0,
+                0,   2, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   14, 0,   0, 0, 0,   0,   0,   0,
+                22,  0, 0,   0, 26, 0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
+                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,
+                169, 0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   180, 0,   0,  0,   0, 0, 0,   0,   0,   0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   202, 0,  0,   0, 0, 0,   0,   209, 0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   229, 0,   0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 249, 0,   0,   0,
+                0,   0, 255, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  267, 0, 0, 0,   0,   0,   0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   285, 0,   0,  0,   0, 0, 0,   0,   0,   0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 305, 0,   0,   0,  0,   0, 0, 312, 0,   0,   0,
+                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,
         },
         {
-                0,   2, 0,   0,   0,   0, 0, 0,  0,  0,   0,  0,  0, 0, 0,  0, 0, 0, 0,   0, 0, 0,
-                23,  0, 0,   0,   0,   0, 0, 30, 0,  0,   0,  0,  0, 0, 0,  0, 0, 0, 0,   0, 0, 0,
-                0,   0, 0,   0,   0,   0, 0, 0,  0,  0,   0,  56, 0, 0, 59, 0, 0, 0, 0,   0, 0, 0,
-                0,   0, 0,   0,   0,   0, 0, 0,  75, 0,   0,  0,  0, 0, 0,  0, 0, 0, 0,   0, 0, 0,
-                0,   0, 0,   0,   0,   0, 0, 96, 0,  0,   99, 0,  0, 0, 0,  0, 0, 0, 107, 0, 0, 0,
-                0,   0, 113, 0,   0,   0, 0, 0,  0,  0,   0,  0,  0, 0, 0,  0, 0, 0, 0,   0, 0, 0,
-                0,   0, 0,   0,   0,   0, 0, 0,  0,  0,   0,  0,  0, 0, 0,  0, 0, 0, 0,   0, 0, 0,
-                0,   0, 0,   0,   159, 0, 0, 0,  0,  0,   0,  0,  0, 0, 0,  0, 0, 0, 0,   0, 0, 0,
-                177, 0, 0,   0,   0,   0, 0, 0,  0,  186, 0,  0,  0, 0, 0,  0, 0, 0, 0,   0, 0, 0,
-                199, 0, 0,   202, 0,   0, 0, 0,  0,  0,   0,  0,  0, 0,
+                0,   2, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 23, 0, 0,   0, 0,   0, 0,   30,  0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   51,  0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   75, 0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 105, 0, 0,   0, 109, 0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   134, 0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   170, 0,   0, 173, 0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 189, 0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   210, 0,   0, 213, 0,   0,  0,   0, 0, 0, 0,
+                221, 0, 0,  0, 0,   0, 227, 0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 273, 0,   0,  0,   0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   291, 0, 0,   0,   0,  0,   0, 0, 0, 300,
+                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 313, 0,   0,  316, 0, 0, 0, 0,
+                0,   0, 0,  0, 0,   0,
         },
         {
-                0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
         },
         {
-                0, 42, 0, 0, 0,   0, 0, 0,   0, 0, 0,   0,   0, 0, 0,   0,  0, 0,   0, 0, 0, 0,
-                0, 0,  0, 0, 0,   0, 0, 0,   0, 0, 0,   0,   0, 0, 0,   0,  0, 0,   0, 0, 0, 0,
-                0, 0,  0, 0, 0,   0, 0, 0,   0, 0, 0,   0,   0, 0, 0,   60, 0, 0,   0, 0, 0, 0,
-                0, 0,  0, 0, 0,   0, 0, 74,  0, 0, 0,   0,   0, 0, 0,   0,  0, 0,   0, 0, 0, 0,
-                0, 0,  0, 0, 0,   0, 0, 0,   0, 0, 0,   100, 0, 0, 103, 0,  0, 106, 0, 0, 0, 0,
-                0, 0,  0, 0, 0,   0, 0, 0,   0, 0, 121, 0,   0, 0, 0,   0,  0, 0,   0, 0, 0, 0,
-                0, 0,  0, 0, 0,   0, 0, 0,   0, 0, 0,   0,   0, 0, 0,   0,  0, 0,   0, 0, 0, 154,
-                0, 0,  0, 0, 0,   0, 0, 0,   0, 0, 0,   0,   0, 0, 0,   0,  0, 172, 0, 0, 0, 0,
-                0, 0,  0, 0, 0,   0, 0, 0,   0, 0, 0,   0,   0, 0, 0,   0,  0, 0,   0, 0, 0, 0,
-                0, 0,  0, 0, 203, 0, 0, 206, 0, 0, 0,   0,   0, 0,
+                0, 156, 0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 36,  0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   63,
+                0, 0,   0, 67,  0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 86,  0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   137, 0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 0,   0,   174, 0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 188, 0,
+                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 214, 0,   0,   217, 0, 0, 220, 0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 235, 0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 268, 0, 0, 0, 0,   0,
+                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 286, 0, 0, 0,   0, 0, 0, 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,   320, 0,   0,   0, 0, 0,   0,
         },
         {
-                0,  2, 0, 0, 0, 6, 0,   0,   0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                49, 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,
-                97, 0, 0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0,  0, 0, 0, 0, 0, 151, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0,   200, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,
+                0,   2,   0, 0, 0,  6, 0, 0, 0, 0, 0, 0, 13, 0, 0,   0, 0,  0, 0,   0, 0, 0, 50, 0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 45, 0, 0,   0, 0, 0, 47, 0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
+                0,   0,   0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 163, 0, 0, 0, 0,  0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 183, 0, 0,  0, 0,   0, 0, 0, 0,  0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 211, 0, 0, 0, 0,  0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
+                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
+                265, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
+                0,   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, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,
         },
         {
-                0,   2,   0,   0,   0, 0,  0,   0,   0, 0,   11, 0,   0, 0, 0, 0, 0,   0, 0,   0,
-                0,   0,   0,   0,   0, 0,  27,  0,   0, 0,   0,  0,   0, 0, 0, 0, 0,   0, 0,   0,
-                0,   0,   0,   0,   0, 46, 0,   0,   0, 50,  0,  0,   0, 0, 0, 0, 0,   0, 0,   0,
-                0,   0,   63,  0,   0, 0,  0,   0,   0, 70,  0,  0,   0, 0, 0, 0, 0,   0, 0,   0,
-                0,   82,  0,   0,   0, 0,  87,  0,   0, 0,   0,  0,   0, 0, 0, 0, 0,   0, 0,   0,
-                101, 0,   0,   0,   0, 0,  0,   0,   0, 0,   0,  0,   0, 0, 0, 0, 117, 0, 0,   0,
-                0,   122, 0,   0,   0, 0,  0,   128, 0, 0,   0,  0,   0, 0, 0, 0, 0,   0, 139, 0,
-                0,   0,   143, 0,   0, 0,  147, 0,   0, 0,   0,  152, 0, 0, 0, 0, 157, 0, 0,   0,
-                161, 0,   0,   0,   0, 0,  0,   0,   0, 0,   0,  0,   0, 0, 0, 0, 0,   0, 0,   0,
-                181, 0,   0,   0,   0, 0,  0,   0,   0, 190, 0,  0,   0, 0, 0, 0, 0,   0, 0,   0,
-                0,   0,   0,   204, 0, 0,  0,   0,   0, 210, 0,  0,
+                0,   2,   0,   0,   0, 0,   0,   0,  0,   0,   11,  0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 65,  0,   0,  0,   27,  0,   0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   49,  0,   0,
+                0,   0,   54,  0,   0, 0,   0,   59, 0,   61,  0,   0,   64, 0,   0,   0,   0,
+                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 0,   0,   93, 0,   0,   0,   0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   119,
+                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   131, 0,  0,   0,   0,   0,
+                0,   0,   139, 140, 0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 0,   160, 0,  0,   0,   164, 0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 0,   177, 0,  0,   0,   0,   0,   0,  184, 0,   0,   0,
+                0,   0,   0,   0,   0, 0,   0,   0,  196, 0,   0,   0,   0,  201, 0,   0,   0,
+                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   215, 0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 0,   0,   0,  0,   231, 0,   0,   0,  0,   236, 0,   0,
+                0,   0,   0,   242, 0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   253, 0,   0,
+                0,   257, 0,   0,   0, 261, 0,   0,  0,   0,   266, 0,   0,  0,   0,   271, 0,
+                0,   0,   275, 0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   0,
+                0,   0,   0,   0,   0, 295, 0,   0,  0,   0,   0,   0,   0,  0,   304, 0,   0,
+                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   318, 0,  0,   0,   0,   0,
+                324, 0,   0,
         },
         {
-                0, 2, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 125, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144,
-                0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 2, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 57, 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, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 143, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 239, 240,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0,
         },
         {
-                0, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 160, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 188, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
+                0, 2, 0,   0, 0, 0,   0, 0,  9, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 48,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 80, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 147, 0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 246, 0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 0,  0, 274, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0,   0, 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, 2,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 209, 0, 0, 0,
+                0, 2, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 74, 0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 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, 91, 0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   117, 0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 148, 0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 175, 0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 284, 0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
+                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 323, 0, 0, 0,
         },
         {
-                0,   47, 0, 4,  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,   32,  0,  0, 0, 0, 37, 0, 0, 40,  0,   0, 0,   0,
-                0,   0,  0, 0,  0, 0, 0, 0, 0,   0,   0,  0, 0, 0, 0,  0, 0, 0,   0,   0, 0,   0,
-                67,  0,  0, 0,  0, 0, 0, 0, 0,   0,   77, 0, 0, 0, 0,  0, 0, 0,   85,  0, 0,   0,
-                0,   0,  0, 92, 0, 0, 0, 0, 0,   0,   0,  0, 0, 0, 0,  0, 0, 0,   0,   0, 109, 0,
-                0,   0,  0, 0,  0, 0, 0, 0, 0,   120, 0,  0, 0, 0, 0,  0, 0, 0,   0,   0, 131, 0,
-                133, 0,  0, 0,  0, 0, 0, 0, 0,   0,   0,  0, 0, 0, 0,  0, 0, 150, 0,   0, 0,   0,
-                0,   0,  0, 0,  0, 0, 0, 0, 0,   164, 0,  0, 0, 0, 0,  0, 0, 0,   0,   0, 0,   0,
-                0,   0,  0, 0,  0, 0, 0, 0, 185, 0,   0,  0, 0, 0, 0,  0, 0, 0,   195, 0, 0,   0,
-                0,   0,  0, 0,  0, 0, 0, 0, 0,   0,   0,  0, 0, 0,
+                0,   161, 0,   4, 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,   32, 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, 71,  0,
+                0,   0,   0,   0, 0, 0, 79,  0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
+                0,   0,   0,   0, 0, 0, 97,  0,   0, 0,   101, 0,   0,   0,  0,  0, 0,   0,
+                0,   0,   111, 0, 0, 0, 115, 0,   0, 0,   0,   0,   0,   0,  0,  0, 125, 0,
+                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
+                0,   146, 0,   0, 0, 0, 151, 0,   0, 154, 0,   0,   0,   0,  0,  0, 0,   0,
+                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
+                181, 0,   0,   0, 0, 0, 0,   0,   0, 0,   191, 0,   0,   0,  0,  0, 0,   0,
+                199, 0,   0,   0, 0, 0, 0,   206, 0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
+                0,   0,   0,   0, 0, 0, 223, 0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   234,
+                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   245, 0,   247, 0,  0,  0, 0,   0,
+                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   264, 0,   0,  0,  0, 0,   0,
+                0,   0,   0,   0, 0, 0, 0,   278, 0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
+                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   299, 0,   0,   0,  0,  0, 0,   0,
+                0,   0,   309, 0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
+                0,   0,
         },
         {
-                0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,
+                0, 2, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0,   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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                53, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0,   0, 24,
-                25, 0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0,   0,   0, 0,
-                0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0,   0, 0,
-                0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0,   0, 0,
-                0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0,   0, 0,
-                0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   142, 0, 0,
-                0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0,   0, 0,
-                0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 189, 0,   0, 0,
-                0,  0,  0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,
+                0,   198, 0,  10, 0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
+                114, 24,  25, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 38, 0,   0,  0, 0,   0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
+                0,   68,  0,  0,  0, 0, 0, 0, 0, 0, 0, 78, 0,   0,   0, 0,  0,   84, 0, 94,  0, 88,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  123, 0,   0, 0,  127, 0,  0, 0,   0, 0,
+                133, 0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  145, 0,   0, 0,  0,   0,  0, 152, 0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   256, 0, 0,  0,   0,  0, 0,   0, 0,
+                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   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, 112, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 121, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 176, 0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         },
         {
-                0,   2,   0, 0,  5, 0, 0,   8, 0, 0, 0,   12, 0,   0,   0, 0, 0, 0, 0,  0,   0, 0,
-                0,   0,   0, 0,  0, 0, 0,   0, 0, 0, 0,   34, 0,   0,   0, 0, 0, 0, 41, 0,   0, 0,
-                0,   0,   0, 48, 0, 0, 0,   0, 0, 0, 0,   0,  0,   0,   0, 0, 0, 0, 0,  64,  0, 0,
-                0,   68,  0, 0,  0, 0, 0,   0, 0, 0, 0,   0,  79,  0,   0, 0, 0, 0, 0,  86,  0, 0,
-                0,   0,   0, 0,  0, 0, 0,   0, 0, 0, 0,   0,  0,   102, 0, 0, 0, 0, 0,  0,   0, 0,
-                111, 0,   0, 0,  0, 0, 0,   0, 0, 0, 0,   0,  0,   0,   0, 0, 0, 0, 0,  0,   0, 0,
-                0,   134, 0, 0,  0, 0, 0,   0, 0, 0, 0,   0,  0,   0,   0, 0, 0, 0, 0,  0,   0, 0,
-                0,   0,   0, 0,  0, 0, 0,   0, 0, 0, 165, 0,  0,   0,   0, 0, 0, 0, 0,  174, 0, 0,
-                0,   178, 0, 0,  0, 0, 0,   0, 0, 0, 187, 0,  0,   0,   0, 0, 0, 0, 0,  0,   0, 0,
-                0,   0,   0, 0,  0, 0, 205, 0, 0, 0, 0,   0,  211, 0,
+                0,   2,   0, 0,  5,   0, 0, 8,   0, 0, 0, 12,  0,   0,  0,   0,   0, 0,   0,   0,
+                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   34, 0,   0,   0, 0,   0,   0,
+                0,   0,   0, 44, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  55,  0,   0, 0,   0,   0,
+                0,   62,  0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   73,  0,  0,   0,   0, 0,   0,   0,
+                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 98,  0,   0,
+                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   113, 0,  0,   0,   0, 0,   0,   120,
+                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   0,   0,
+                141, 0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  155, 0,   0, 0,   0,   0,
+                0,   162, 0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 178, 0,   0,
+                0,   182, 0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   193, 0,  0,   0,   0, 0,   0,   200,
+                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   216, 0, 0,   0,   0,
+                0,   0,   0, 0,  225, 0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   0,   0,
+                0,   0,   0, 0,  0,   0, 0, 248, 0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   0,   0,
+                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   279, 0,
+                0,   0,   0, 0,  0,   0, 0, 288, 0, 0, 0, 292, 0,   0,  0,   0,   0, 0,   0,   0,
+                301, 0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   319, 0,
+                0,   0,   0, 0,  325, 0,
         },
         {
-                0,   124, 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, 33, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0,
-                0,   0,   0, 0, 0, 0, 0,  0, 0,   0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0,
-                0,   0,   0, 0, 0, 0, 73, 0, 0,   0, 0,  78, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0,
-                0,   0,   0, 0, 0, 0, 0,  0, 0,   0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 110,
-                0,   0,   0, 0, 0, 0, 0,  0, 0,   0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0,
-                0,   0,   0, 0, 0, 0, 0,  0, 0,   0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0,
-                155, 0,   0, 0, 0, 0, 0,  0, 163, 0, 0,  0,  0, 0, 0, 0, 0, 0, 173, 0, 0, 0,
-                0,   0,   0, 0, 0, 0, 0,  0, 0,   0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0,
-                0,   0,   0, 0, 0, 0, 0,  0, 0,   0, 0,  0,  0, 0,
+                0,   238, 0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 19, 0, 0,  0,
+                129, 0,   0, 0,   0,   0,  0, 0, 0, 0, 33,  0, 0,   0, 37, 0,   39, 0, 0,  0, 0,  0,
+                0,   46,  0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 0,   0,   72, 0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 87, 0,
+                89,  0,   0, 0,   0,   0,  0, 0, 0, 0, 99,  0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   112, 0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 0,   142, 0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 187, 0, 0,   0, 0,  192, 0,  0, 0,  0, 0,  0,
+                219, 0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 224, 0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 0,   269, 0,  0, 0, 0, 0, 0,   0, 277, 0, 0,  0,   0,  0, 0,  0, 0,  0,
+                287, 0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
+                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0,
         },
         {
-                0,  162, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,  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, 45, 0, 0, 0,
-                52, 0,   0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,
-                0,  0,   0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0, 0, 93, 0, 0, 0,
-                0,  0,   0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,
-                0,  0,   0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 138, 0, 0, 0,  0, 0, 0,
-                0,  0,   0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,
-                0,  0,   0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,
-                0,  0,   0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0, 0,
+                0, 276, 0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   17, 18, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 126, 0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 159, 0, 0, 0, 166, 0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 207, 0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
+                0, 310, 0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,
         },
         {
-                0,  2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         },
         {
-                0, 2, 0,  0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0, 20, 0, 0,
-                0, 0, 0,  0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0, 0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0, 0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0, 0,  0, 0,
-                0, 0, 91, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0, 0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 130, 0,   0,   0,   0, 0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0,   148, 149, 0,   0, 0,  0, 0,
-                0, 0, 0,  158, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0, 0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0,   0,   0,   194, 0, 0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 2,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   20,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   40,
+                0, 0,   43,  0, 0,   0, 0, 0,   0, 0,  0, 52,  0, 0,   0, 0,  0, 0,   0,   60,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 76, 0, 0,   0,   0,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 90, 0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
+                0, 0,   0,   0, 0,   0, 0, 108, 0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 132, 0, 0,   0, 0,  0, 138, 0,   0,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
+                0, 0,   0,   0, 205, 0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 232, 0, 0,   0, 0,  0, 0,   244, 0,
+                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 254, 0, 0,  0, 0,   0,   0,
+                0, 262, 263, 0, 0,   0, 0, 0,   0, 0,  0, 272, 0, 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, 308, 0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
+                0, 0,   0,   0, 0,   0,
         },
         {
-                0,  180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  15,  0,   0,   0, 0, 0, 0,   0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,   80, 0,   0,   0,   0, 0, 0, 0,   94,
-                89, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,   0,   0, 0, 0, 0,   0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0,  0,   0,   127, 0, 0, 0, 0,   0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,   0,   0,   0, 0, 0, 0,   0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0,  169, 0,   0,   0, 0, 0, 175, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  197, 192, 0,   0, 0, 0, 0,   0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+                0, 294, 0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   15, 0,   0, 0, 0, 0, 0,
+                0, 136, 0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   35,  0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   70, 0,   0, 0,   0,   83,  0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 104, 0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  100, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 194, 0,   0,  0,   0, 0,   0,   0,   208, 203, 0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   237, 0,  0,   0, 241, 0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  281, 0, 283, 0,   0,   0,   0,   0,  289, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   311, 306, 0,   0,   0,  0,   0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,
         },
         {
-                0,  183, 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,  31, 0, 0,   0,  0, 0,   0,  0,  39,  0,
-                0,  0,   43, 0, 0,   0,   0, 0,   0,   0,  0,  0, 0,   54, 0, 0,   57, 58, 0,   0,
-                0,  0,   0,  0, 65,  0,   0, 0,   0,   0,  0,  0, 0,   0,  0, 76,  0,  0,  0,   0,
-                0,  0,   0,  0, 0,   0,   0, 0,   0,   90, 0,  0, 0,   0,  0, 0,   0,  0,  0,   0,
-                0,  0,   0,  0, 0,   0,   0, 108, 0,   0,  0,  0, 0,   0,  0, 0,   0,  0,  119, 0,
-                0,  0,   0,  0, 0,   0,   0, 0,   129, 0,  0,  0, 0,   0,  0, 0,   0,  0,  0,   0,
-                0,  0,   0,  0, 145, 0,   0, 0,   0,   0,  0,  0, 0,   0,  0, 0,   0,  0,  0,   0,
-                0,  0,   0,  0, 0,   166, 0, 0,   0,   0,  0,  0, 0,   0,  0, 176, 0,  0,  179, 0,
-                0,  182, 0,  0, 0,   0,   0, 0,   0,   0,  0,  0, 193, 0,  0, 0,   0,  0,  0,   0,
-                0,  0,   0,  0, 0,   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,   21, 0, 0,   0,   0,   0,   0,   0,   0, 0,   31,  0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   0,   0,   0,   0,   82,  0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 102, 0,   0, 0, 106, 0,   0,
+                0,   110, 0,  0, 0,   0,   0,   0,   0,   118, 0, 0,   0,   0, 0, 124, 0,   0,
+                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   144,
+                0,   0,   0,  0, 149, 0,   0,   0,   153, 0,   0, 0,   157, 0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   168, 0,   0,   171, 172, 0, 0,   0,   0, 0, 0,   179, 0,
+                0,   0,   0,  0, 0,   0,   0,   0,   0,   190, 0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   204, 0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   222, 0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   233, 0,
+                0,   0,   0,  0, 0,   0,   0,   0,   243, 0,   0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   0,   259, 0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,   0,  0, 0,   0,   0,   0,   0,   280, 0, 0,   0,   0, 0, 0,   0,   0,
+                0,   290, 0,  0, 293, 0,   0,   296, 0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
+                307, 0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
+                0,   0,
         },
         {
-                0, 2, 0, 36, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,  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,  53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,   0, 0, 0, 0, 0,
-                0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,   0, 0, 0, 0, 0,
-                0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,   0, 0, 0, 0, 0,
-                0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0,   0, 0, 0, 0, 0,
-                0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 168, 0, 0, 0, 0, 0,
-                0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,   0, 0, 0, 0, 0,
-                0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,   0,
+                0, 2, 0,  150, 0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 16, 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,   42, 0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 69, 0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  92,  0, 0, 95, 0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 107, 0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 122, 0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   167, 0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  250, 0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   282, 0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
+                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0,
         },
         {
-                0,  2, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                72, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
-                0,  0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0,  0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
+                0, 2, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 130, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 186, 0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 230, 0, 0, 0, 0, 0,   0, 0, 0, 260, 0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 270, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
+                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
         },
         {
-                0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         },
         {
-                0, 2, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 51, 0, 0, 0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,
+                0, 2, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 185, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
+                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,
         },
         {
-                0, 2, 0, 0, 0, 0, 0, 0,   0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 44, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 83, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,  0, 0, 0, 207, 0, 0, 0, 0, 0,
+                0, 2, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 103, 0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 128, 0, 0,   0,   0,
+                0, 0, 135, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   158, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   197, 0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 218, 0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
+                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0,   0, 0, 0,
         },
 };
 
-static int8_t accepts[212] = {
-        -1, -1, 24, 24, -1, -1, -1, -1, -1, 3,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, 6,  24, -1,
-        -1, -1, 23, 24, -1, -1, -1, 4,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-        -1, -1, -1, -1, -1, 7,  -1, -1, -1, -1, -1, -1, -1, -1, 20, 24, -1, 22, 24, -1, -1, -1,
-        -1, -1, -1, -1, -1, 14, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, -1, -1, -1, -1, -1,
-        -1, 1,  24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 24, -1, -1, -1, -1, 2,  -1, -1,
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8,  -1, -1, -1, -1, -1, -1, -1, -1,
-        -1, -1, -1, -1, -1, -1, -1, 9,  24, -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, -1,
-        -1, -1, -1, 11, 24, -1, 5,  24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 16,
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 24, -1, -1, 21,
+static int8_t accepts[326] = {
+        -1, -1, 39, 39, -1, -1, -1, -1, -1, 3,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1,
+        17, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, 20, -1,
+        -1, -1, -1, -1, -1, -1, -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, 18, -1, -1, -1, -1, -1,
+        -1, -1, 24, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, 23, -1, -1, -1, -1, -1, -1, 15, -1, -1, -1, -1, -1, -1, -1, 11, -1, -1, -1,
+        -1, -1, -1, 13, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1,
+        -1, 6,  39, -1, -1, -1, 38, 39, -1, -1, -1, 4,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, 7,  -1, -1, -1, -1, -1, -1, -1, -1, 35, 39, -1, 37,
+        39, -1, -1, -1, -1, -1, -1, -1, -1, 29, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, -1,
+        -1, -1, -1, -1, -1, 1,  39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, 39, -1, -1, -1,
+        -1, 2,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8,  -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9,  39, -1, -1, -1, -1, 27, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, 26, 39, -1, 5,  39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, 32, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, 39, -1, -1, 36,
 };
 
 LayoutToken LayoutLexer::next() {
diff --git a/src/sksl/SkSLLayoutLexer.h b/src/sksl/SkSLLayoutLexer.h
index 148a8f3..fa337ed 100644
--- a/src/sksl/SkSLLayoutLexer.h
+++ b/src/sksl/SkSLLayoutLexer.h
@@ -37,6 +37,36 @@
         OVERRIDE_COVERAGE,
 #undef BLEND_SUPPORT_ALL_EQUATIONS
         BLEND_SUPPORT_ALL_EQUATIONS,
+#undef BLEND_SUPPORT_MULTIPLY
+        BLEND_SUPPORT_MULTIPLY,
+#undef BLEND_SUPPORT_SCREEN
+        BLEND_SUPPORT_SCREEN,
+#undef BLEND_SUPPORT_OVERLAY
+        BLEND_SUPPORT_OVERLAY,
+#undef BLEND_SUPPORT_DARKEN
+        BLEND_SUPPORT_DARKEN,
+#undef BLEND_SUPPORT_LIGHTEN
+        BLEND_SUPPORT_LIGHTEN,
+#undef BLEND_SUPPORT_COLORDODGE
+        BLEND_SUPPORT_COLORDODGE,
+#undef BLEND_SUPPORT_COLORBURN
+        BLEND_SUPPORT_COLORBURN,
+#undef BLEND_SUPPORT_HARDLIGHT
+        BLEND_SUPPORT_HARDLIGHT,
+#undef BLEND_SUPPORT_SOFTLIGHT
+        BLEND_SUPPORT_SOFTLIGHT,
+#undef BLEND_SUPPORT_DIFFERENCE
+        BLEND_SUPPORT_DIFFERENCE,
+#undef BLEND_SUPPORT_EXCLUSION
+        BLEND_SUPPORT_EXCLUSION,
+#undef BLEND_SUPPORT_HSL_HUE
+        BLEND_SUPPORT_HSL_HUE,
+#undef BLEND_SUPPORT_HSL_SATURATION
+        BLEND_SUPPORT_HSL_SATURATION,
+#undef BLEND_SUPPORT_HSL_COLOR
+        BLEND_SUPPORT_HSL_COLOR,
+#undef BLEND_SUPPORT_HSL_LUMINOSITY
+        BLEND_SUPPORT_HSL_LUMINOSITY,
 #undef PUSH_CONSTANT
         PUSH_CONSTANT,
 #undef POINTS
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index d140ce2..1b6690d 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -666,6 +666,7 @@
 
 /* LAYOUT LPAREN IDENTIFIER (EQ INT_LITERAL)? (COMMA IDENTIFIER (EQ INT_LITERAL)?)* RPAREN */
 Layout Parser::layout() {
+    int flags = 0;
     int location = -1;
     int offset = -1;
     int binding = -1;
@@ -673,11 +674,7 @@
     int set = -1;
     int builtin = -1;
     int inputAttachmentIndex = -1;
-    bool originUpperLeft = false;
-    bool overrideCoverage = false;
-    bool blendSupportAllEquations = false;
     Layout::Format format = Layout::Format::kUnspecified;
-    bool pushConstant = false;
     Layout::Primitive primitive = Layout::kUnspecified_Primitive;
     int maxVertices = -1;
     int invocations = -1;
@@ -686,9 +683,9 @@
     Layout::Key key = Layout::kNo_Key;
     if (this->checkNext(Token::LAYOUT)) {
         if (!this->expect(Token::LPAREN, "'('")) {
-            return Layout(location, offset, binding, index, set, builtin, inputAttachmentIndex,
-                          originUpperLeft, overrideCoverage, blendSupportAllEquations, format,
-                          pushConstant, primitive, maxVertices, invocations, when, key, ctype);
+            return Layout(flags, location, offset, binding, index, set, builtin,
+                          inputAttachmentIndex, format, primitive, maxVertices, invocations, when,
+                          key, ctype);
         }
         for (;;) {
             Token t = this->nextToken();
@@ -719,16 +716,61 @@
                         inputAttachmentIndex = this->layoutInt();
                         break;
                     case LayoutToken::ORIGIN_UPPER_LEFT:
-                        originUpperLeft = true;
+                        flags |= Layout::kOriginUpperLeft_Flag;
                         break;
                     case LayoutToken::OVERRIDE_COVERAGE:
-                        overrideCoverage = true;
+                        flags |= Layout::kOverrideCoverage_Flag;
                         break;
                     case LayoutToken::BLEND_SUPPORT_ALL_EQUATIONS:
-                        blendSupportAllEquations = true;
+                        flags |= Layout::kBlendSupportAllEquations_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_MULTIPLY:
+                        flags |= Layout::kBlendSupportMultiply_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_SCREEN:
+                        flags |= Layout::kBlendSupportScreen_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_OVERLAY:
+                        flags |= Layout::kBlendSupportOverlay_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_DARKEN:
+                        flags |= Layout::kBlendSupportDarken_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_LIGHTEN:
+                        flags |= Layout::kBlendSupportLighten_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_COLORDODGE:
+                        flags |= Layout::kBlendSupportColorDodge_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_COLORBURN:
+                        flags |= Layout::kBlendSupportColorBurn_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_HARDLIGHT:
+                        flags |= Layout::kBlendSupportHardLight_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_SOFTLIGHT:
+                        flags |= Layout::kBlendSupportSoftLight_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_DIFFERENCE:
+                        flags |= Layout::kBlendSupportDifference_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_EXCLUSION:
+                        flags |= Layout::kBlendSupportExclusion_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_HSL_HUE:
+                        flags |= Layout::kBlendSupportHSLHue_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_HSL_SATURATION:
+                        flags |= Layout::kBlendSupportHSLSaturation_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_HSL_COLOR:
+                        flags |= Layout::kBlendSupportHSLColor_Flag;
+                        break;
+                    case LayoutToken::BLEND_SUPPORT_HSL_LUMINOSITY:
+                        flags |= Layout::kBlendSupportHSLLuminosity_Flag;
                         break;
                     case LayoutToken::PUSH_CONSTANT:
-                        pushConstant = true;
+                        flags |= Layout::kPushConstant_Flag;
                         break;
                     case LayoutToken::POINTS:
                         primitive = Layout::kPoints_Primitive;
@@ -766,8 +808,6 @@
                     case LayoutToken::CTYPE:
                         ctype = this->layoutIdentifier();
                         break;
-                    default:
-                        ASSERT(false);
                 }
             } else if (Layout::ReadFormat(this->text(t), &format)) {
                // AST::ReadFormat stored the result in 'format'.
@@ -782,9 +822,8 @@
             }
         }
     }
-    return Layout(location, offset, binding, index, set, builtin, inputAttachmentIndex,
-                  originUpperLeft, overrideCoverage, blendSupportAllEquations, format,
-                  pushConstant, primitive, maxVertices, invocations, when, key, ctype);
+    return Layout(flags, location, offset, binding, index, set, builtin, inputAttachmentIndex,
+                  format, primitive, maxVertices, invocations, when, key, ctype);
 }
 
 /* layout? (UNIFORM | CONST | IN | OUT | INOUT | LOWP | MEDIUMP | HIGHP | FLAT | NOPERSPECTIVE |
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.cpp b/src/sksl/SkSLSPIRVCodeGenerator.cpp
index 1366c09..9f24ed3 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.cpp
+++ b/src/sksl/SkSLSPIRVCodeGenerator.cpp
@@ -1839,13 +1839,13 @@
 
 SpvStorageClass_ get_storage_class(const Modifiers& modifiers) {
     if (modifiers.fFlags & Modifiers::kIn_Flag) {
-        ASSERT(!modifiers.fLayout.fPushConstant);
+        ASSERT(!(modifiers.fLayout.fFlags & Layout::kPushConstant_Flag));
         return SpvStorageClassInput;
     } else if (modifiers.fFlags & Modifiers::kOut_Flag) {
-        ASSERT(!modifiers.fLayout.fPushConstant);
+        ASSERT(!(modifiers.fLayout.fFlags & Layout::kPushConstant_Flag));
         return SpvStorageClassOutput;
     } else if (modifiers.fFlags & Modifiers::kUniform_Flag) {
-        if (modifiers.fLayout.fPushConstant) {
+        if (modifiers.fLayout.fFlags & Layout::kPushConstant_Flag) {
             return SpvStorageClassPushConstant;
         }
         return SpvStorageClassUniform;
@@ -2091,9 +2091,9 @@
             fields.emplace_back(Modifiers(), SKSL_RTHEIGHT_NAME, fContext.fFloat_Type.get());
             StringFragment name("sksl_synthetic_uniforms");
             Type intfStruct(-1, name, fields);
-            Layout layout(-1, -1, 1, -1, -1, -1, -1, false, false, false,
-                          Layout::Format::kUnspecified, false, Layout::kUnspecified_Primitive, -1,
-                          -1, "", Layout::kNo_Key, StringFragment());
+            Layout layout(0, -1, -1, 1, -1, -1, -1, -1, Layout::Format::kUnspecified,
+                          Layout::kUnspecified_Primitive, -1, -1, "", Layout::kNo_Key,
+                          StringFragment());
             Variable* intfVar = new Variable(-1,
                                              Modifiers(layout, Modifiers::kUniform_Flag),
                                              name,
@@ -2858,7 +2858,9 @@
 
 SpvId SPIRVCodeGenerator::writeInterfaceBlock(const InterfaceBlock& intf) {
     bool isBuffer = (0 != (intf.fVariable.fModifiers.fFlags & Modifiers::kBuffer_Flag));
-    MemoryLayout layout = (intf.fVariable.fModifiers.fLayout.fPushConstant || isBuffer) ?
+    bool pushConstant = (0 != (intf.fVariable.fModifiers.fLayout.fFlags &
+                               Layout::kPushConstant_Flag));
+    MemoryLayout layout = (pushConstant || isBuffer) ?
                           MemoryLayout(MemoryLayout::k430_Standard) :
                           fDefaultLayout;
     SpvId result = this->nextId();
diff --git a/src/sksl/ir/SkSLLayout.h b/src/sksl/ir/SkSLLayout.h
index 9c4fcb1..3082b34 100644
--- a/src/sksl/ir/SkSLLayout.h
+++ b/src/sksl/ir/SkSLLayout.h
@@ -19,6 +19,28 @@
  * layout (location = 0) int x;
  */
 struct Layout {
+    enum Flag {
+        kOriginUpperLeft_Flag            = 1 <<  0,
+        kOverrideCoverage_Flag           = 1 <<  1,
+        kPushConstant_Flag               = 1 <<  2,
+        kBlendSupportAllEquations_Flag   = 1 <<  3,
+        kBlendSupportMultiply_Flag       = 1 <<  4,
+        kBlendSupportScreen_Flag         = 1 <<  5,
+        kBlendSupportOverlay_Flag        = 1 <<  6,
+        kBlendSupportDarken_Flag         = 1 <<  7,
+        kBlendSupportLighten_Flag        = 1 <<  8,
+        kBlendSupportColorDodge_Flag     = 1 <<  9,
+        kBlendSupportColorBurn_Flag      = 1 << 10,
+        kBlendSupportHardLight_Flag      = 1 << 11,
+        kBlendSupportSoftLight_Flag      = 1 << 12,
+        kBlendSupportDifference_Flag     = 1 << 13,
+        kBlendSupportExclusion_Flag      = 1 << 14,
+        kBlendSupportHSLHue_Flag         = 1 << 15,
+        kBlendSupportHSLSaturation_Flag  = 1 << 16,
+        kBlendSupportHSLColor_Flag       = 1 << 17,
+        kBlendSupportHSLLuminosity_Flag  = 1 << 18
+    };
+
     enum Primitive {
         kUnspecified_Primitive = -1,
         kPoints_Primitive,
@@ -97,22 +119,18 @@
         return false;
     }
 
-    Layout(int location, int offset, int binding, int index, int set, int builtin,
-           int inputAttachmentIndex, bool originUpperLeft, bool overrideCoverage,
-           bool blendSupportAllEquations, Format format, bool pushconstant, Primitive primitive,
-           int maxVertices, int invocations, String when, Key key, StringFragment ctype)
-    : fLocation(location)
+    Layout(int flags, int location, int offset, int binding, int index, int set, int builtin,
+           int inputAttachmentIndex, Format format, Primitive primitive, int maxVertices,
+           int invocations, String when, Key key, StringFragment ctype)
+    : fFlags(flags)
+    , fLocation(location)
     , fOffset(offset)
     , fBinding(binding)
     , fIndex(index)
     , fSet(set)
     , fBuiltin(builtin)
     , fInputAttachmentIndex(inputAttachmentIndex)
-    , fOriginUpperLeft(originUpperLeft)
-    , fOverrideCoverage(overrideCoverage)
-    , fBlendSupportAllEquations(blendSupportAllEquations)
     , fFormat(format)
-    , fPushConstant(pushconstant)
     , fPrimitive(primitive)
     , fMaxVertices(maxVertices)
     , fInvocations(invocations)
@@ -121,18 +139,15 @@
     , fCType(ctype) {}
 
     Layout()
-    : fLocation(-1)
+    : fFlags(0)
+    , fLocation(-1)
     , fOffset(-1)
     , fBinding(-1)
     , fIndex(-1)
     , fSet(-1)
     , fBuiltin(-1)
     , fInputAttachmentIndex(-1)
-    , fOriginUpperLeft(false)
-    , fOverrideCoverage(false)
-    , fBlendSupportAllEquations(false)
     , fFormat(Format::kUnspecified)
-    , fPushConstant(false)
     , fPrimitive(kUnspecified_Primitive)
     , fMaxVertices(-1)
     , fInvocations(-1)
@@ -169,23 +184,83 @@
             result += separator + "input_attachment_index = " + to_string(fBuiltin);
             separator = ", ";
         }
-        if (fOriginUpperLeft) {
-            result += separator + "origin_upper_left";
-            separator = ", ";
-        }
-        if (fOverrideCoverage) {
-            result += separator + "override_coverage";
-            separator = ", ";
-        }
-        if (fBlendSupportAllEquations) {
-            result += separator + "blend_support_all_equations";
-            separator = ", ";
-        }
         if (Format::kUnspecified != fFormat) {
             result += separator + FormatToStr(fFormat);
             separator = ", ";
         }
-        if (fPushConstant) {
+        if (fFlags & kOriginUpperLeft_Flag) {
+            result += separator + "origin_upper_left";
+            separator = ", ";
+        }
+        if (fFlags & kOverrideCoverage_Flag) {
+            result += separator + "override_coverage";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportAllEquations_Flag) {
+            result += separator + "blend_support_all_equations";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportMultiply_Flag) {
+            result += separator + "blend_support_multiply";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportScreen_Flag) {
+            result += separator + "blend_support_screen";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportOverlay_Flag) {
+            result += separator + "blend_support_overlay";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportDarken_Flag) {
+            result += separator + "blend_support_darken";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportLighten_Flag) {
+            result += separator + "blend_support_lighten";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportColorDodge_Flag) {
+            result += separator + "blend_support_colordodge";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportColorBurn_Flag) {
+            result += separator + "blend_support_colorburn";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportHardLight_Flag) {
+            result += separator + "blend_support_hardlight";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportSoftLight_Flag) {
+            result += separator + "blend_support_softlight";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportDifference_Flag) {
+            result += separator + "blend_support_difference";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportExclusion_Flag) {
+            result += separator + "blend_support_exclusion";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportHSLHue_Flag) {
+            result += separator + "blend_support_hsl_hue";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportHSLSaturation_Flag) {
+            result += separator + "blend_support_hsl_saturation";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportHSLColor_Flag) {
+            result += separator + "blend_support_hsl_color";
+            separator = ", ";
+        }
+        if (fFlags & kBlendSupportHSLLuminosity_Flag) {
+            result += separator + "blend_support_hsl_luminosity";
+            separator = ", ";
+        }
+        if (fFlags & kPushConstant_Flag) {
             result += separator + "push_constant";
             separator = ", ";
         }
@@ -240,26 +315,25 @@
     }
 
     bool operator==(const Layout& other) const {
-        return fLocation                 == other.fLocation &&
-               fOffset                   == other.fOffset &&
-               fBinding                  == other.fBinding &&
-               fIndex                    == other.fIndex &&
-               fSet                      == other.fSet &&
-               fBuiltin                  == other.fBuiltin &&
-               fInputAttachmentIndex     == other.fInputAttachmentIndex &&
-               fOriginUpperLeft          == other.fOriginUpperLeft &&
-               fOverrideCoverage         == other.fOverrideCoverage &&
-               fBlendSupportAllEquations == other.fBlendSupportAllEquations &&
-               fFormat                   == other.fFormat &&
-               fPrimitive                == other.fPrimitive &&
-               fMaxVertices              == other.fMaxVertices &&
-               fInvocations              == other.fInvocations;
+        return fFlags                == other.fFlags &&
+               fLocation             == other.fLocation &&
+               fOffset               == other.fOffset &&
+               fBinding              == other.fBinding &&
+               fIndex                == other.fIndex &&
+               fSet                  == other.fSet &&
+               fBuiltin              == other.fBuiltin &&
+               fInputAttachmentIndex == other.fInputAttachmentIndex &&
+               fFormat               == other.fFormat &&
+               fPrimitive            == other.fPrimitive &&
+               fMaxVertices          == other.fMaxVertices &&
+               fInvocations          == other.fInvocations;
     }
 
     bool operator!=(const Layout& other) const {
         return !(*this == other);
     }
 
+    int fFlags;
     int fLocation;
     int fOffset;
     int fBinding;
@@ -271,11 +345,7 @@
     // input_attachment_index comes from Vulkan/SPIR-V to connect a shader variable to the a
     // corresponding attachment on the subpass in which the shader is being used.
     int fInputAttachmentIndex;
-    bool fOriginUpperLeft;
-    bool fOverrideCoverage;
-    bool fBlendSupportAllEquations;
     Format fFormat;
-    bool fPushConstant;
     Primitive fPrimitive;
     int fMaxVertices;
     int fInvocations;
diff --git a/src/sksl/lex/layout.lex b/src/sksl/lex/layout.lex
index a0c3987..87fc944 100644
--- a/src/sksl/lex/layout.lex
+++ b/src/sksl/lex/layout.lex
@@ -1,24 +1,39 @@
-LOCATION                    = "location"
-OFFSET                      = "offset"
-BINDING                     = "binding"
-INDEX                       = "index"
-SET                         = "set"
-BUILTIN                     = "builtin"
-INPUT_ATTACHMENT_INDEX      = "input_attachment_index"
-ORIGIN_UPPER_LEFT           = "origin_upper_left"
-OVERRIDE_COVERAGE           = "override_coverage"
-BLEND_SUPPORT_ALL_EQUATIONS = "blend_support_all_equations"
-PUSH_CONSTANT               = "push_constant"
-POINTS                      = "points"
-LINES                       = "lines"
-LINE_STRIP                  = "line_strip"
-LINES_ADJACENCY             = "lines_adjacency"
-TRIANGLES                   = "triangles"
-TRIANGLE_STRIP              = "triangle_strip"
-TRIANGLES_ADJACENCY         = "triangles_adjacency"
-MAX_VERTICES                = "max_vertices"
-INVOCATIONS                 = "invocations"
-WHEN                        = "when"
-KEY                         = "key"
-CTYPE                       = "ctype"
-INVALID                     = .
+LOCATION                     = "location"
+OFFSET                       = "offset"
+BINDING                      = "binding"
+INDEX                        = "index"
+SET                          = "set"
+BUILTIN                      = "builtin"
+INPUT_ATTACHMENT_INDEX       = "input_attachment_index"
+ORIGIN_UPPER_LEFT            = "origin_upper_left"
+OVERRIDE_COVERAGE            = "override_coverage"
+BLEND_SUPPORT_ALL_EQUATIONS  = "blend_support_all_equations"
+BLEND_SUPPORT_MULTIPLY       = "blend_support_multiply"
+BLEND_SUPPORT_SCREEN         = "blend_support_screen"
+BLEND_SUPPORT_OVERLAY        = "blend_support_overlay"
+BLEND_SUPPORT_DARKEN         = "blend_support_darken"
+BLEND_SUPPORT_LIGHTEN        = "blend_support_lighten"
+BLEND_SUPPORT_COLORDODGE     = "blend_support_colordodge"
+BLEND_SUPPORT_COLORBURN      = "blend_support_colorburn"
+BLEND_SUPPORT_HARDLIGHT      = "blend_support_hardlight"
+BLEND_SUPPORT_SOFTLIGHT      = "blend_support_softlight"
+BLEND_SUPPORT_DIFFERENCE     = "blend_support_difference"
+BLEND_SUPPORT_EXCLUSION      = "blend_support_exclusion"
+BLEND_SUPPORT_HSL_HUE        = "blend_support_hsl_hue"
+BLEND_SUPPORT_HSL_SATURATION = "blend_support_hsl_saturation"
+BLEND_SUPPORT_HSL_COLOR      = "blend_support_hsl_color"
+BLEND_SUPPORT_HSL_LUMINOSITY = "blend_support_hsl_luminosity"
+PUSH_CONSTANT                = "push_constant"
+POINTS                       = "points"
+LINES                        = "lines"
+LINE_STRIP                   = "line_strip"
+LINES_ADJACENCY              = "lines_adjacency"
+TRIANGLES                    = "triangles"
+TRIANGLE_STRIP               = "triangle_strip"
+TRIANGLES_ADJACENCY          = "triangles_adjacency"
+MAX_VERTICES                 = "max_vertices"
+INVOCATIONS                  = "invocations"
+WHEN                         = "when"
+KEY                          = "key"
+CTYPE                        = "ctype"
+INVALID                      = .