diff --git a/Geo/GFace.h b/Geo/GFace.h
index f7044dde96f358f65636b307da5cf0bb06fb63f3..9f71f5981bc8b25c8af1df17f67a699954bb70ff 100644
--- a/Geo/GFace.h
+++ b/Geo/GFace.h
@@ -9,6 +9,7 @@
 #include <list>
 #include <string>
 #include <vector>
+#include <map>
 #include "GEntity.h"
 #include "GPoint.h"
 #include "GEdgeLoop.h"
@@ -313,6 +314,9 @@ class GFace : public GEntity
   void replaceEdges(std::list<GEdge*> &);
   
   static void registerBindings(binding *b);
+
+  // periodic counterparts of edges
+  std::map<int,int> edgeCounterparts;
 };
 
 #endif
diff --git a/Geo/Geo.h b/Geo/Geo.h
index bffb02862dc9c128d9eb403c7cffca0fe624e1aa..efb639bab7bdd7e56b7534ea903881f4347eb318 100644
--- a/Geo/Geo.h
+++ b/Geo/Geo.h
@@ -165,7 +165,9 @@ class Surface{
   // should be the only one in gmsh, so parameter "Type" should
   // disappear from the class Surface.
   gmshSurface *geometry;
+  // the mesh master surface
   int meshMaster;
+  std::map<int,int> edgeCounterparts;
   std::vector<int> compound, compoundBoundary[4];
 };
 
diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp
index f0d3645d558822fcce54f512d4a360ca42560883..2d316ffeaa12cef5e1e2c82394ef85d4e2416676 100644
--- a/Geo/GeoStringInterface.cpp
+++ b/Geo/GeoStringInterface.cpp
@@ -315,8 +315,18 @@ void add_compound(std::string type, List_T *list, std::string fileName)
 {
   std::ostringstream sstream;
   if(SplitFileName(fileName)[2] != ".geo") sstream << "CreateTopology;\n";
-  sstream << "Compound " << type << "(" << NEWREG() << ") = {" 
-          << list2string(list) << "};";
+  if (type == "Surface"){
+    sstream << "Compound " << type << "(" << NEWSURFACE()+1000 << ") = {" 
+	    << list2string(list) << "};";
+  }
+  else if (type == "Line"){
+    sstream << "Compound " << type << "(" << NEWLINE()+1000 << ") = {" 
+	    << list2string(list) << "};";
+  }
+  else{
+    sstream << "Compound " << type << "(" << NEWREG() << ") = {" 
+	    << list2string(list) << "};";
+  }
   add_infile(sstream.str(), fileName);
 }
 
diff --git a/Geo/gmshFace.cpp b/Geo/gmshFace.cpp
index 78566bfe080b92f940bf554ff083c3d60b9b580d..0450472a95eda5b045fb1132c86af279cfdc39f5 100644
--- a/Geo/gmshFace.cpp
+++ b/Geo/gmshFace.cpp
@@ -22,6 +22,7 @@ gmshFace::gmshFace(GModel *m, Surface *face)
   resetMeshAttributes();
 
   setMeshMaster(s->meshMaster);
+  edgeCounterparts = s->edgeCounterparts;
   //  printf("surface %d master %d\n",tag(),meshMaster());
 
   std::list<GEdge*> l_wire;
diff --git a/Mesh/highOrderSmoother.cpp b/Mesh/highOrderSmoother.cpp
index dcadba10c29d991fd7fb5d7d6322c4747ffd147d..b978be5f548f4be9951fdc205e6af7dff02389d4 100644
--- a/Mesh/highOrderSmoother.cpp
+++ b/Mesh/highOrderSmoother.cpp
@@ -376,11 +376,11 @@ void highOrderSmoother::optimize(GFace * gf,
     smooth(gf, true);
     
     
-    for (int i=0;i<100;i++){
-      int nbSwap = 
-	swapHighOrderTriangles(gf,edgeVertices,faceVertices,this);
-      printf("%d swaps\n",nbSwap);
-    }
+    //    for (int i=0;i<100;i++){
+      //      int nbSwap = 
+	//	swapHighOrderTriangles(gf,edgeVertices,faceVertices,this);
+	//      printf("%d swaps\n",nbSwap);
+    //    }
     
     // smooth(gf,true);
     // smooth(gf,true);
diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index 40c2ca585a3e5f005f2b0fc760bf8d0efc37ec90..6501751ca361c1c62fbe359e41620d051696e0ec 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -41,32 +41,42 @@
 static void copyMesh (GFace *source, GFace *target)
 {
   std::map<MVertex*,MVertex*> vs2vt;
-  
-  std::list<GEdge*> edges = target->edges();
-  for (std::list<GEdge*>::iterator it = edges.begin(); it!=edges.end(); ++it){
-    GEdge *te = *it;
-    int master = te->meshMaster();
-    if (master == te->tag()){
-      Msg::Error("Periodic face %d does not have periodic edges (master %d -- edge %d)",
-                 target->tag(), master, te->tag());      
-    }
-    GEdge *se  = source->model()->getEdgeByTag(abs(master));
-    if (master > 0){
-      vs2vt[se->getBeginVertex()->mesh_vertices[0]] = te->getBeginVertex()->mesh_vertices[0];
-      vs2vt[se->getEndVertex()->mesh_vertices[0]] = te->getEndVertex()->mesh_vertices[0];
-      for (unsigned i=0;i<se->mesh_vertices.size();i++){
-	MVertex *vs = se->mesh_vertices[i];
-	MVertex *vt = te->mesh_vertices[i];
-	vs2vt[vs] = vt;
+  std::list<GEdge*> edges   = target->edges();
+  {
+    std::list<GEdge*>::iterator it = edges.begin();
+    for (; it!=edges.end(); ++it){
+      int sign = 1;
+      std::map<int,int>::iterator adnksd = target->edgeCounterparts.find((*it)->tag());
+      int source_e;
+      if ( adnksd != target->edgeCounterparts.end())
+	 source_e= adnksd->second;
+      else{
+	sign = -1;
+	source_e = target->edgeCounterparts[-(*it)->tag()];
       }
-    }
-    else {
-      vs2vt[se->getEndVertex()->mesh_vertices[0]] = te->getBeginVertex()->mesh_vertices[0];
-      vs2vt[se->getBeginVertex()->mesh_vertices[0]] = te->getEndVertex()->mesh_vertices[0];
-      for (unsigned i=0;i<se->mesh_vertices.size();i++){
-	MVertex *vs = se->mesh_vertices[i];
-	MVertex *vt = te->mesh_vertices[se->mesh_vertices.size()-i-1];
-	vs2vt[vs] = vt;
+
+      //      printf("face %d = %d vs %d (%d counterparts)\n",source->tag(),(*it)->tag(),source_e,target->edgeCounterparts.size());
+
+
+      GEdge *se = source->model()->getEdgeByTag(abs(source_e));
+      GEdge *te = *it;
+      if (source_e * sign > 0){
+	vs2vt[se->getBeginVertex()->mesh_vertices[0]] = te->getBeginVertex()->mesh_vertices[0];
+	vs2vt[se->getEndVertex()->mesh_vertices[0]] = te->getEndVertex()->mesh_vertices[0];
+	for (unsigned i=0;i<se->mesh_vertices.size();i++){
+	  MVertex *vs = se->mesh_vertices[i];
+	  MVertex *vt = te->mesh_vertices[i];
+	  vs2vt[vs] = vt;
+	}
+      }
+      else {
+	vs2vt[se->getBeginVertex()->mesh_vertices[0]] = te->getEndVertex()->mesh_vertices[0];
+	vs2vt[se->getEndVertex()->mesh_vertices[0]] = te->getBeginVertex()->mesh_vertices[0];
+	for (unsigned i=0;i<se->mesh_vertices.size();i++){
+	  MVertex *vs = se->mesh_vertices[i];
+	  MVertex *vt = te->mesh_vertices[se->mesh_vertices.size() - i - 1];
+	  vs2vt[vs] = vt;
+	}
       }
     }
   }
@@ -120,11 +130,39 @@ static void copyMesh (GFace *source, GFace *target)
   }
 
   for (unsigned i=0;i<source->triangles.size();i++){
-    MVertex *v1 = vs2vt[source->triangles[i]->getVertex(0)];
-    MVertex *v2 = vs2vt[source->triangles[i]->getVertex(1)];
-    MVertex *v3 = vs2vt[source->triangles[i]->getVertex(2)];
-    target->triangles.push_back(new MTriangle(v1,v2,v3));
+    MVertex *vt[3];
+    for (int j=0;j<3;j++){
+      MVertex *vs = source->triangles[i]->getVertex(j); 
+      
+      vt[j] = vs2vt[vs];
+      if (!vt[j]){
+	SPoint2 p;
+	bool success = reparamMeshVertexOnFace(vs, source, p);
+	const double U =   c * (p.x()-s1u) + s * (p.y()-s1v) + t1u;
+	const double V =  -s * (p.x()-s1u) + c * (p.y()-s1v) + t1v;
+	for (std::list<GEdge*>::iterator it = edges.begin(); it!=edges.end(); ++it){
+	  GEdge *te = *it;
+	  for (unsigned k=0;k<te->lines.size();k++){
+	    MVertex *gotcha = te->lines[k]->getVertex(0);
+	    bool success2 = reparamMeshVertexOnFace(gotcha, target, p);
+	    const double D = sqrt((U-p.x())*(U-p.x())+(V-p.y())*(V-p.y()));
+	    if (D < 1.e-9){
+	      vt[j] = gotcha;
+	      break;
+	    }
+	  }
+	}
+      }
+    }
+    if (!vt[0] || !vt[1] ||!vt[2]){
+      Msg::Fatal("yet another error in the copymesh procedure %p %p %p %d %d %d",
+		 vt[0],vt[1],vt[2],source->triangles[i]->getVertex(0)->onWhat()->dim(),
+		 source->triangles[i]->getVertex(1)->onWhat()->dim(),
+		 source->triangles[i]->getVertex(2)->onWhat()->dim());
+    }
+    target->triangles.push_back(new MTriangle(vt[0],vt[1],vt[2]));
   }
+
   for (unsigned i=0;i<source->quadrangles.size();i++){
     MVertex *v1 = vs2vt[source->quadrangles[i]->getVertex(0)];
     MVertex *v2 = vs2vt[source->quadrangles[i]->getVertex(1)];
diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp
index a6ee7a905095451d823d2e8f276fb85fbad21e13..c2678cdc70eaac4f1c2413eb559d7dea5e252c17 100644
--- a/Mesh/meshGFaceDelaunayInsertion.cpp
+++ b/Mesh/meshGFaceDelaunayInsertion.cpp
@@ -667,6 +667,20 @@ static void insertManyPoints(GFace *gf,
 			     std::set<MTri3*,compareTri3Ptr> &AllTris,
 			     std::set<MTri3*,compareTri3Ptr> *ActiveTris = 0){
   
+  // a first implementation : greeeeedy algorithm
+  for (std::list<SPoint2>::iterator itp = points.begin(); itp != points.end() ; ++itp){
+    std::set<MTri3*,compareTri3Ptr> :: iterator it =  AllTris.begin();  
+    double metric[3];
+    double pa[2] = {itp->x(),itp->y()};
+    buildMetric(gf, pa, metric);
+    for (; it != AllTris.end() ; ++it){
+      int found =  inCircumCircleAniso(gf, (*it)->tri(), pa, metric, Us, Vs);
+      if (found){
+	insertAPoint(gf, it, pa, metric, Us, Vs, vSizes, vSizesBGM, vMetricsBGM, AllTris, ActiveTris);
+	break;
+      }
+    }    
+  }
 }
 
 
@@ -773,22 +787,6 @@ static double lengthMetric(const double p[2], const double q[2],
      
 */
 
-void testTensor()
-{
-  SMetric3 t(1.0);  
-  t(0,0) = 1;
-  t(1,0) = .2;
-  t(1,1) = 2;
-  t(2,2) = 3;
-  fullMatrix<double> m(3,3);
-  fullVector<double> v(3);
-  t.eig(m,v);
-  printf("%12.5E %12.5E %12.5E \n",v(0),v(1),v(2));
-  printf("%12.5E %12.5E %12.5E \n",m(0,0),m(1,0),m(2,0));
-  printf("%12.5E %12.5E %12.5E \n",m(0,1),m(1,1),m(2,1));
-  printf("%12.5E %12.5E %12.5E \n",m(0,2),m(1,2),m(2,2));
-}
-
 void bowyerWatsonFrontal(GFace *gf)
 {
   std::set<MTri3*,compareTri3Ptr> AllTris;
@@ -796,8 +794,6 @@ void bowyerWatsonFrontal(GFace *gf)
   std::vector<double> vSizes, vSizesBGM, Us, Vs;
   std::vector<SMetric3> vMetricsBGM;
 
-  //testTensor();
-
   buildMeshGenerationDataStructures
     (gf, AllTris, vSizes, vSizesBGM, vMetricsBGM,Us, Vs);
 
@@ -891,11 +887,13 @@ void bowyerWatsonFrontal(GFace *gf)
       insertAPoint(gf, AllTris.end(), newPoint, metric, Us, Vs, vSizes,
                    vSizesBGM, vMetricsBGM, AllTris, &ActiveTris, worst);
     } 
-//     if(ITER % 1000== 0){
-//       char name[245];
-//       sprintf(name,"frontal%d-ITER%d.pos",gf->tag(),ITER);
-//       _printTris (name, AllTris, Us,Vs,false);
-//     }
+    /*
+   if(ITER % 100== 0){
+       char name[245];
+       sprintf(name,"frontal%d-ITER%d.pos",gf->tag(),ITER);
+       _printTris (name, AllTris, Us,Vs,false);
+     }
+    */
   }
 
 //   char name[245];
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 8b7e01b1935ecb08c9244eb10faf9f4d53348281..b365c9564a3bf1d97ec6cb65d51d8420a5e7bc2e 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -689,7 +689,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   6711
+#define YYLAST   6953
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  153
@@ -698,7 +698,7 @@ union yyalloc
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  388
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1386
+#define YYNSTATES  1392
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -780,21 +780,21 @@ static const yytype_uint16 yyprhs[] =
     1311,  1328,  1329,  1346,  1347,  1364,  1365,  1384,  1385,  1404,
     1405,  1424,  1426,  1429,  1435,  1443,  1453,  1456,  1466,  1467,
     1469,  1470,  1474,  1475,  1477,  1478,  1481,  1482,  1485,  1493,
-    1500,  1509,  1515,  1521,  1528,  1535,  1542,  1553,  1564,  1575,
-    1586,  1589,  1593,  1605,  1617,  1629,  1641,  1643,  1647,  1650,
-    1653,  1656,  1660,  1664,  1668,  1672,  1676,  1680,  1684,  1688,
-    1692,  1696,  1700,  1704,  1708,  1712,  1718,  1723,  1728,  1733,
-    1738,  1743,  1748,  1753,  1758,  1763,  1768,  1775,  1780,  1785,
-    1790,  1795,  1800,  1805,  1812,  1819,  1826,  1831,  1836,  1841,
-    1846,  1851,  1856,  1861,  1866,  1871,  1876,  1881,  1888,  1893,
-    1898,  1903,  1908,  1913,  1918,  1925,  1932,  1939,  1944,  1946,
-    1948,  1950,  1952,  1954,  1956,  1958,  1960,  1966,  1971,  1976,
-    1979,  1985,  1989,  1996,  2001,  2009,  2016,  2018,  2021,  2024,
-    2028,  2032,  2044,  2054,  2062,  2070,  2072,  2076,  2078,  2080,
-    2083,  2087,  2092,  2098,  2100,  2102,  2105,  2109,  2113,  2119,
-    2124,  2126,  2128,  2132,  2139,  2141,  2143,  2147,  2151,  2161,
-    2169,  2171,  2177,  2181,  2188,  2190,  2194,  2196,  2198,  2202,
-    2209,  2211,  2213,  2218,  2225,  2232,  2237,  2242,  2247
+    1500,  1509,  1515,  1521,  1528,  1535,  1544,  1555,  1566,  1577,
+    1588,  1591,  1595,  1607,  1619,  1631,  1643,  1645,  1649,  1652,
+    1655,  1658,  1662,  1666,  1670,  1674,  1678,  1682,  1686,  1690,
+    1694,  1698,  1702,  1706,  1710,  1714,  1720,  1725,  1730,  1735,
+    1740,  1745,  1750,  1755,  1760,  1765,  1770,  1777,  1782,  1787,
+    1792,  1797,  1802,  1807,  1814,  1821,  1828,  1833,  1838,  1843,
+    1848,  1853,  1858,  1863,  1868,  1873,  1878,  1883,  1890,  1895,
+    1900,  1905,  1910,  1915,  1920,  1927,  1934,  1941,  1946,  1948,
+    1950,  1952,  1954,  1956,  1958,  1960,  1962,  1968,  1973,  1978,
+    1981,  1987,  1991,  1998,  2003,  2011,  2018,  2020,  2023,  2026,
+    2030,  2034,  2046,  2056,  2064,  2072,  2074,  2078,  2080,  2082,
+    2085,  2089,  2094,  2100,  2102,  2104,  2107,  2111,  2115,  2121,
+    2126,  2128,  2130,  2134,  2141,  2143,  2145,  2149,  2153,  2163,
+    2171,  2173,  2179,  2183,  2190,  2192,  2196,  2198,  2200,  2204,
+    2211,  2213,  2215,  2220,  2227,  2234,  2239,  2244,  2249
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -953,79 +953,79 @@ static const yytype_int16 yyrhs[] =
       58,    52,   150,   221,   151,     7,   226,     6,    -1,    61,
       54,   227,   214,     6,    -1,    76,    52,   227,   215,     6,
       -1,    77,    52,   226,     7,   221,     6,    -1,    65,    49,
-     226,     7,   226,     6,    -1,    65,    52,   226,     7,   226,
-       6,    -1,    46,   150,   229,   151,    99,    52,   150,   221,
-     151,     6,    -1,    49,   150,   229,   151,    99,    52,   150,
-     221,   151,     6,    -1,    49,   150,   229,   151,    99,    54,
-     150,   221,   151,     6,    -1,    52,   150,   229,   151,    99,
-      54,   150,   221,   151,     6,    -1,    80,     6,    -1,    80,
-       4,     6,    -1,   116,   143,   233,   144,     7,   150,   226,
-     149,   226,   151,     6,    -1,   117,   143,   233,   144,     7,
-     150,   226,   149,   226,   151,     6,    -1,   118,   143,   233,
-     144,     7,   150,   226,   149,   226,   151,     6,    -1,   119,
+     226,     7,   226,     6,    -1,    65,    52,   221,   226,     7,
+     221,   226,     6,    -1,    46,   150,   229,   151,    99,    52,
+     150,   221,   151,     6,    -1,    49,   150,   229,   151,    99,
+      52,   150,   221,   151,     6,    -1,    49,   150,   229,   151,
+      99,    54,   150,   221,   151,     6,    -1,    52,   150,   229,
+     151,    99,    54,   150,   221,   151,     6,    -1,    80,     6,
+      -1,    80,     4,     6,    -1,   116,   143,   233,   144,     7,
+     150,   226,   149,   226,   151,     6,    -1,   117,   143,   233,
+     144,     7,   150,   226,   149,   226,   151,     6,    -1,   118,
      143,   233,   144,     7,   150,   226,   149,   226,   151,     6,
-      -1,   222,    -1,   143,   221,   144,    -1,   134,   221,    -1,
-     133,   221,    -1,   138,   221,    -1,   221,   134,   221,    -1,
-     221,   133,   221,    -1,   221,   135,   221,    -1,   221,   136,
-     221,    -1,   221,   137,   221,    -1,   221,   142,   221,    -1,
-     221,   129,   221,    -1,   221,   130,   221,    -1,   221,   132,
-     221,    -1,   221,   131,   221,    -1,   221,   128,   221,    -1,
-     221,   127,   221,    -1,   221,   126,   221,    -1,   221,   125,
-     221,    -1,   221,   124,   221,     8,   221,    -1,    14,   143,
-     221,   144,    -1,    15,   143,   221,   144,    -1,    16,   143,
-     221,   144,    -1,    17,   143,   221,   144,    -1,    18,   143,
-     221,   144,    -1,    19,   143,   221,   144,    -1,    20,   143,
-     221,   144,    -1,    21,   143,   221,   144,    -1,    22,   143,
-     221,   144,    -1,    24,   143,   221,   144,    -1,    25,   143,
-     221,   149,   221,   144,    -1,    26,   143,   221,   144,    -1,
-      27,   143,   221,   144,    -1,    28,   143,   221,   144,    -1,
-      29,   143,   221,   144,    -1,    30,   143,   221,   144,    -1,
-      31,   143,   221,   144,    -1,    32,   143,   221,   149,   221,
-     144,    -1,    33,   143,   221,   149,   221,   144,    -1,    34,
-     143,   221,   149,   221,   144,    -1,    23,   143,   221,   144,
-      -1,    14,   145,   221,   146,    -1,    15,   145,   221,   146,
-      -1,    16,   145,   221,   146,    -1,    17,   145,   221,   146,
-      -1,    18,   145,   221,   146,    -1,    19,   145,   221,   146,
-      -1,    20,   145,   221,   146,    -1,    21,   145,   221,   146,
-      -1,    22,   145,   221,   146,    -1,    24,   145,   221,   146,
-      -1,    25,   145,   221,   149,   221,   146,    -1,    26,   145,
-     221,   146,    -1,    27,   145,   221,   146,    -1,    28,   145,
-     221,   146,    -1,    29,   145,   221,   146,    -1,    30,   145,
-     221,   146,    -1,    31,   145,   221,   146,    -1,    32,   145,
-     221,   149,   221,   146,    -1,    33,   145,   221,   149,   221,
-     146,    -1,    34,   145,   221,   149,   221,   146,    -1,    23,
-     145,   221,   146,    -1,     3,    -1,     9,    -1,    10,    -1,
-      11,    -1,   113,    -1,   114,    -1,   115,    -1,     4,    -1,
-       4,   152,   150,   221,   151,    -1,     4,   145,   221,   146,
-      -1,   148,     4,   145,   146,    -1,     4,   176,    -1,     4,
-     145,   221,   146,   176,    -1,     4,   147,     4,    -1,     4,
-     145,   221,   146,   147,     4,    -1,     4,   147,     4,   176,
-      -1,     4,   145,   221,   146,   147,     4,   176,    -1,   110,
-     143,   233,   149,   221,   144,    -1,   224,    -1,   134,   223,
-      -1,   133,   223,    -1,   223,   134,   223,    -1,   223,   133,
-     223,    -1,   150,   221,   149,   221,   149,   221,   149,   221,
-     149,   221,   151,    -1,   150,   221,   149,   221,   149,   221,
-     149,   221,   151,    -1,   150,   221,   149,   221,   149,   221,
-     151,    -1,   143,   221,   149,   221,   149,   221,   144,    -1,
-     226,    -1,   225,   149,   226,    -1,   221,    -1,   228,    -1,
-     150,   151,    -1,   150,   229,   151,    -1,   134,   150,   229,
-     151,    -1,   221,   135,   150,   229,   151,    -1,   226,    -1,
-       5,    -1,   134,   228,    -1,   221,   135,   228,    -1,   221,
-       8,   221,    -1,   221,     8,   221,     8,   221,    -1,    46,
-     150,   221,   151,    -1,   186,    -1,   195,    -1,     4,   145,
-     146,    -1,     4,   145,   150,   229,   151,   146,    -1,   221,
-      -1,   228,    -1,   229,   149,   221,    -1,   229,   149,   228,
-      -1,   150,   221,   149,   221,   149,   221,   149,   221,   151,
-      -1,   150,   221,   149,   221,   149,   221,   151,    -1,     4,
-      -1,     4,   147,    96,   147,     4,    -1,   150,   232,   151,
-      -1,     4,   145,   221,   146,   147,    97,    -1,   230,    -1,
-     232,   149,   230,    -1,   234,    -1,     4,    -1,     4,   147,
-       4,    -1,     4,   145,   221,   146,   147,     4,    -1,     5,
-      -1,    42,    -1,   111,   143,   233,   144,    -1,   112,   143,
-     233,   149,   233,   144,    -1,    37,   143,   233,   149,   233,
-     144,    -1,    38,   143,   233,   144,    -1,    39,   143,   233,
-     144,    -1,    36,   143,   233,   144,    -1,    36,   143,   233,
-     149,   229,   144,    -1
+      -1,   119,   143,   233,   144,     7,   150,   226,   149,   226,
+     151,     6,    -1,   222,    -1,   143,   221,   144,    -1,   134,
+     221,    -1,   133,   221,    -1,   138,   221,    -1,   221,   134,
+     221,    -1,   221,   133,   221,    -1,   221,   135,   221,    -1,
+     221,   136,   221,    -1,   221,   137,   221,    -1,   221,   142,
+     221,    -1,   221,   129,   221,    -1,   221,   130,   221,    -1,
+     221,   132,   221,    -1,   221,   131,   221,    -1,   221,   128,
+     221,    -1,   221,   127,   221,    -1,   221,   126,   221,    -1,
+     221,   125,   221,    -1,   221,   124,   221,     8,   221,    -1,
+      14,   143,   221,   144,    -1,    15,   143,   221,   144,    -1,
+      16,   143,   221,   144,    -1,    17,   143,   221,   144,    -1,
+      18,   143,   221,   144,    -1,    19,   143,   221,   144,    -1,
+      20,   143,   221,   144,    -1,    21,   143,   221,   144,    -1,
+      22,   143,   221,   144,    -1,    24,   143,   221,   144,    -1,
+      25,   143,   221,   149,   221,   144,    -1,    26,   143,   221,
+     144,    -1,    27,   143,   221,   144,    -1,    28,   143,   221,
+     144,    -1,    29,   143,   221,   144,    -1,    30,   143,   221,
+     144,    -1,    31,   143,   221,   144,    -1,    32,   143,   221,
+     149,   221,   144,    -1,    33,   143,   221,   149,   221,   144,
+      -1,    34,   143,   221,   149,   221,   144,    -1,    23,   143,
+     221,   144,    -1,    14,   145,   221,   146,    -1,    15,   145,
+     221,   146,    -1,    16,   145,   221,   146,    -1,    17,   145,
+     221,   146,    -1,    18,   145,   221,   146,    -1,    19,   145,
+     221,   146,    -1,    20,   145,   221,   146,    -1,    21,   145,
+     221,   146,    -1,    22,   145,   221,   146,    -1,    24,   145,
+     221,   146,    -1,    25,   145,   221,   149,   221,   146,    -1,
+      26,   145,   221,   146,    -1,    27,   145,   221,   146,    -1,
+      28,   145,   221,   146,    -1,    29,   145,   221,   146,    -1,
+      30,   145,   221,   146,    -1,    31,   145,   221,   146,    -1,
+      32,   145,   221,   149,   221,   146,    -1,    33,   145,   221,
+     149,   221,   146,    -1,    34,   145,   221,   149,   221,   146,
+      -1,    23,   145,   221,   146,    -1,     3,    -1,     9,    -1,
+      10,    -1,    11,    -1,   113,    -1,   114,    -1,   115,    -1,
+       4,    -1,     4,   152,   150,   221,   151,    -1,     4,   145,
+     221,   146,    -1,   148,     4,   145,   146,    -1,     4,   176,
+      -1,     4,   145,   221,   146,   176,    -1,     4,   147,     4,
+      -1,     4,   145,   221,   146,   147,     4,    -1,     4,   147,
+       4,   176,    -1,     4,   145,   221,   146,   147,     4,   176,
+      -1,   110,   143,   233,   149,   221,   144,    -1,   224,    -1,
+     134,   223,    -1,   133,   223,    -1,   223,   134,   223,    -1,
+     223,   133,   223,    -1,   150,   221,   149,   221,   149,   221,
+     149,   221,   149,   221,   151,    -1,   150,   221,   149,   221,
+     149,   221,   149,   221,   151,    -1,   150,   221,   149,   221,
+     149,   221,   151,    -1,   143,   221,   149,   221,   149,   221,
+     144,    -1,   226,    -1,   225,   149,   226,    -1,   221,    -1,
+     228,    -1,   150,   151,    -1,   150,   229,   151,    -1,   134,
+     150,   229,   151,    -1,   221,   135,   150,   229,   151,    -1,
+     226,    -1,     5,    -1,   134,   228,    -1,   221,   135,   228,
+      -1,   221,     8,   221,    -1,   221,     8,   221,     8,   221,
+      -1,    46,   150,   221,   151,    -1,   186,    -1,   195,    -1,
+       4,   145,   146,    -1,     4,   145,   150,   229,   151,   146,
+      -1,   221,    -1,   228,    -1,   229,   149,   221,    -1,   229,
+     149,   228,    -1,   150,   221,   149,   221,   149,   221,   149,
+     221,   151,    -1,   150,   221,   149,   221,   149,   221,   151,
+      -1,     4,    -1,     4,   147,    96,   147,     4,    -1,   150,
+     232,   151,    -1,     4,   145,   221,   146,   147,    97,    -1,
+     230,    -1,   232,   149,   230,    -1,   234,    -1,     4,    -1,
+       4,   147,     4,    -1,     4,   145,   221,   146,   147,     4,
+      -1,     5,    -1,    42,    -1,   111,   143,   233,   144,    -1,
+     112,   143,   233,   149,   233,   144,    -1,    37,   143,   233,
+     149,   233,   144,    -1,    38,   143,   233,   144,    -1,    39,
+     143,   233,   144,    -1,    36,   143,   233,   144,    -1,    36,
+     143,   233,   149,   229,   144,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1055,21 +1055,21 @@ static const yytype_uint16 yyrline[] =
     2728,  2740,  2739,  2751,  2750,  2762,  2761,  2773,  2772,  2784,
     2783,  2798,  2801,  2807,  2816,  2836,  2859,  2863,  2887,  2890,
     2906,  2909,  2925,  2928,  2941,  2944,  2950,  2953,  2960,  3016,
-    3086,  3091,  3158,  3201,  3225,  3251,  3283,  3306,  3329,  3332,
-    3341,  3345,  3362,  3399,  3435,  3470,  3510,  3511,  3512,  3513,
-    3514,  3515,  3516,  3517,  3518,  3525,  3526,  3527,  3528,  3529,
-    3530,  3531,  3532,  3533,  3534,  3535,  3536,  3537,  3538,  3539,
-    3540,  3541,  3542,  3543,  3544,  3545,  3546,  3547,  3548,  3549,
-    3550,  3551,  3552,  3553,  3554,  3555,  3556,  3558,  3559,  3560,
-    3561,  3562,  3563,  3564,  3565,  3566,  3567,  3568,  3569,  3570,
-    3571,  3572,  3573,  3574,  3575,  3576,  3577,  3578,  3587,  3588,
-    3589,  3590,  3591,  3592,  3593,  3597,  3616,  3634,  3649,  3659,
-    3675,  3693,  3698,  3703,  3713,  3723,  3731,  3735,  3739,  3743,
-    3747,  3754,  3758,  3762,  3766,  3773,  3778,  3785,  3790,  3794,
-    3799,  3803,  3811,  3822,  3826,  3838,  3846,  3854,  3861,  3872,
-    3892,  3902,  3912,  3922,  3942,  3947,  3951,  3955,  3967,  3971,
-    3983,  3990,  4000,  4004,  4019,  4024,  4031,  4035,  4048,  4056,
-    4067,  4071,  4079,  4087,  4095,  4103,  4117,  4131,  4135
+    3086,  3091,  3158,  3201,  3225,  3251,  3294,  3317,  3340,  3343,
+    3352,  3356,  3373,  3410,  3446,  3481,  3521,  3522,  3523,  3524,
+    3525,  3526,  3527,  3528,  3529,  3536,  3537,  3538,  3539,  3540,
+    3541,  3542,  3543,  3544,  3545,  3546,  3547,  3548,  3549,  3550,
+    3551,  3552,  3553,  3554,  3555,  3556,  3557,  3558,  3559,  3560,
+    3561,  3562,  3563,  3564,  3565,  3566,  3567,  3569,  3570,  3571,
+    3572,  3573,  3574,  3575,  3576,  3577,  3578,  3579,  3580,  3581,
+    3582,  3583,  3584,  3585,  3586,  3587,  3588,  3589,  3598,  3599,
+    3600,  3601,  3602,  3603,  3604,  3608,  3627,  3645,  3660,  3670,
+    3686,  3704,  3709,  3714,  3724,  3734,  3742,  3746,  3750,  3754,
+    3758,  3765,  3769,  3773,  3777,  3784,  3789,  3796,  3801,  3805,
+    3810,  3814,  3822,  3833,  3837,  3849,  3857,  3865,  3872,  3883,
+    3903,  3913,  3923,  3933,  3953,  3958,  3962,  3966,  3978,  3982,
+    3994,  4001,  4011,  4015,  4030,  4035,  4042,  4046,  4059,  4067,
+    4078,  4082,  4090,  4098,  4106,  4114,  4128,  4142,  4146
 };
 #endif
 
@@ -1217,7 +1217,7 @@ static const yytype_uint8 yyr2[] =
       16,     0,    16,     0,    16,     0,    18,     0,    18,     0,
       18,     1,     2,     5,     7,     9,     2,     9,     0,     1,
        0,     3,     0,     1,     0,     2,     0,     2,     7,     6,
-       8,     5,     5,     6,     6,     6,    10,    10,    10,    10,
+       8,     5,     5,     6,     6,     8,    10,    10,    10,    10,
        2,     3,    11,    11,    11,    11,     1,     3,     2,     2,
        2,     3,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     5,     4,     4,     4,     4,
@@ -1296,706 +1296,727 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   349,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   232,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   100,     0,     0,     0,   340,
-     339,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     186,     0,     0,     0,     0,     0,     0,     0,     0,   155,
-       0,     0,   151,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   181,     0,   159,   160,     0,     0,
-       0,     0,     0,     0,     0,   327,   333,     0,    42,     0,
-       0,     0,    55,     0,    33,    34,    35,    36,    37,   276,
-     297,   277,   298,   278,   299,   279,   300,   280,   301,   281,
-     302,   282,   303,   283,   304,   284,   305,   296,   317,   285,
-     306,     0,     0,   287,   308,   288,   309,   289,   310,   290,
-     311,   291,   312,   292,   313,     0,     0,     0,     0,     0,
-       0,   387,     0,     0,   385,   386,    82,     0,   382,     0,
-       0,     0,     0,     0,    57,     0,     0,     0,     0,     0,
-      76,     0,     0,     0,     0,   328,     0,     0,     0,     0,
-       0,    25,    23,     0,     0,     0,     0,   362,     0,     0,
-     357,   263,   356,   366,   367,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   350,     0,
-       0,     0,     0,     0,     0,   230,   235,   233,     0,   241,
-       0,     0,    89,    90,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   128,   130,     0,     0,
-       0,     0,     0,     0,     0,     0,   221,     0,   183,     0,
-       0,     0,     0,     0,   237,   242,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   156,     0,
-       0,     0,     0,     0,   378,     0,     0,     0,     0,     0,
-       0,   330,     0,   326,     0,     0,     0,     0,     0,    29,
+       0,     0,     0,     0,     0,     0,     0,   100,     0,     0,
+       0,   340,   339,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   186,     0,     0,     0,     0,     0,     0,     0,
+       0,   155,     0,     0,   151,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   181,     0,   159,   160,
+       0,     0,     0,     0,     0,     0,     0,   327,   333,     0,
+      42,     0,     0,     0,    55,     0,    33,    34,    35,    36,
+      37,   276,   297,   277,   298,   278,   299,   279,   300,   280,
+     301,   281,   302,   282,   303,   283,   304,   284,   305,   296,
+     317,   285,   306,     0,     0,   287,   308,   288,   309,   289,
+     310,   290,   311,   291,   312,   292,   313,     0,     0,     0,
+       0,     0,     0,   387,     0,     0,   385,   386,    82,     0,
+     382,     0,     0,     0,     0,     0,    57,     0,     0,     0,
+       0,     0,    76,     0,     0,     0,     0,   328,     0,     0,
+       0,     0,     0,    25,    23,     0,     0,     0,     0,   362,
+       0,     0,   357,   263,   356,   366,   367,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   327,    67,    68,     0,     0,     0,     0,     0,
-      70,    72,    74,     0,     0,   374,     0,    80,     0,     0,
-       0,     0,   275,    24,     0,     0,     0,     0,     0,   359,
-       0,     0,    93,    93,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   351,     0,    98,     0,     0,     0,
-       0,     0,     0,   239,     0,     0,     0,     0,     0,     0,
-       0,     0,   244,   245,     0,     0,     0,     0,     0,     0,
-       0,     0,   226,     0,     0,   193,   222,     0,     0,     0,
-     149,     0,     0,   243,     0,   153,   152,     0,    30,    31,
-       0,     0,     0,   371,     0,     0,     0,   173,     0,     0,
-       0,     0,     0,     0,     0,   163,   332,   162,     0,     0,
-       0,     0,   345,     0,   286,   307,   293,   314,   294,   315,
-     295,   316,   388,   384,   335,   383,     0,    57,     0,     0,
-       0,     0,    65,     0,     0,     0,   372,     0,     0,     0,
-       0,    26,    27,     0,     0,    95,     0,   358,     0,     0,
-       0,     0,     0,    99,     0,     0,   116,   117,     0,     0,
-     101,   124,   352,     0,     0,     0,    91,     0,   238,     0,
-       0,     0,     0,     0,     0,   228,     0,   165,     0,     0,
-       0,     0,   137,     0,   203,     0,   205,     0,   207,   347,
-       0,     0,     0,     0,   187,     0,     0,     0,     0,     0,
-       0,     0,     0,   104,   105,     0,     0,     0,     0,    83,
-       0,     0,     0,     0,     0,     0,   334,     0,    38,     0,
-       0,     0,     0,     0,    40,     0,     0,     0,    77,     0,
-       0,    78,     0,   375,   139,   140,   141,   142,     0,     0,
-     363,     0,    94,   102,   103,   107,     0,     0,   118,     0,
-       0,   240,   111,     0,     0,   231,   123,     0,     0,     0,
-       0,   108,   229,     0,   125,     0,     0,     0,   344,     0,
-     343,     0,     0,   194,     0,     0,   195,     0,     0,   196,
-       0,     0,     0,     0,     0,     0,   148,     0,     0,   147,
-       0,     0,   143,     0,     0,     0,     0,   369,     0,   175,
-     174,     0,     0,     0,   379,     0,     0,     0,     0,    43,
-       0,     0,     0,   346,     0,     0,     0,    66,    73,    75,
-       0,    81,     0,    28,     0,     0,     0,     0,     0,     0,
-       0,   112,    97,   110,   122,   127,     0,   119,    87,    88,
-     137,     0,   131,     0,     0,     0,     0,     0,     0,   223,
-       0,     0,   137,     0,     0,     0,     0,   134,   133,     0,
-       0,     0,     0,    84,    85,     0,     0,     0,     0,     0,
-      39,     0,     0,     0,    41,    56,     0,   373,     0,   246,
-     247,   248,   249,   115,     0,     0,     0,     0,   342,     0,
+     350,     0,     0,     0,     0,     0,     0,   230,   235,   233,
+       0,   241,     0,     0,    89,    90,     0,     0,     0,     0,
+       0,     0,     0,   262,   261,     0,     0,     0,     0,     0,
+     128,   130,     0,     0,     0,     0,     0,     0,     0,     0,
+     221,     0,   183,     0,     0,     0,     0,     0,   237,   242,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   188,     0,     0,     0,     0,     0,   368,   176,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    79,     0,
-       0,   228,   129,     0,   209,     0,     0,   211,     0,     0,
-     213,     0,     0,     0,   224,     0,   184,     0,   137,     0,
-       0,     0,   106,    86,   252,   253,   254,   255,     0,    47,
-       0,    53,     0,     0,    92,   229,     0,   341,   197,     0,
-       0,   204,   198,     0,     0,   206,   199,     0,     0,   208,
-       0,     0,     0,   190,     0,   146,     0,     0,     0,     0,
-       0,     0,     0,   120,     0,   215,     0,   217,     0,   219,
-     225,   227,   189,   185,     0,     0,     0,     0,    44,     0,
-      51,     0,     0,     0,   200,     0,     0,   201,     0,     0,
-     202,     0,     0,   150,     0,   144,     0,    45,     0,     0,
-     170,     0,     0,     0,     0,     0,     0,   191,     0,     0,
-       0,     0,     0,   210,     0,   212,     0,   214,     0,   145,
-      46,    48,     0,    49,     0,     0,     0,     0,     0,     0,
-      54,   216,   218,   220,    50,    52
+       0,     0,   156,     0,     0,     0,     0,     0,   378,     0,
+       0,     0,     0,     0,     0,   330,     0,   326,     0,     0,
+       0,     0,     0,    29,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   327,    67,    68,     0,
+       0,     0,     0,     0,    70,    72,    74,     0,     0,   374,
+       0,    80,     0,     0,     0,     0,   275,    24,     0,     0,
+       0,     0,     0,   359,     0,     0,    93,    93,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   351,     0,
+      98,     0,     0,     0,     0,     0,     0,   239,     0,     0,
+       0,     0,     0,     0,     0,     0,   244,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   226,     0,     0,   193,
+     222,     0,     0,     0,   149,     0,     0,   243,     0,   153,
+     152,     0,    30,    31,     0,     0,     0,   371,     0,     0,
+       0,   173,     0,     0,     0,     0,     0,     0,     0,   163,
+     332,   162,     0,     0,     0,     0,   345,     0,   286,   307,
+     293,   314,   294,   315,   295,   316,   388,   384,   335,   383,
+       0,    57,     0,     0,     0,     0,    65,     0,     0,     0,
+     372,     0,     0,     0,     0,    26,    27,     0,     0,    95,
+       0,   358,     0,     0,     0,     0,     0,    99,     0,     0,
+     116,   117,     0,     0,   101,   124,   352,     0,     0,     0,
+      91,     0,   238,     0,     0,     0,     0,     0,     0,   228,
+       0,     0,   165,     0,     0,     0,     0,   137,     0,   203,
+       0,   205,     0,   207,   347,     0,     0,     0,     0,   187,
+       0,     0,     0,     0,     0,     0,     0,     0,   104,   105,
+       0,     0,     0,     0,    83,     0,     0,     0,     0,     0,
+       0,   334,     0,    38,     0,     0,     0,     0,     0,    40,
+       0,     0,     0,    77,     0,     0,    78,     0,   375,   139,
+     140,   141,   142,     0,     0,   363,     0,    94,   102,   103,
+     107,     0,     0,   118,     0,     0,   240,   111,     0,     0,
+     231,   123,     0,     0,     0,     0,   108,   229,     0,   125,
+     245,     0,     0,     0,   344,     0,   343,     0,     0,   194,
+       0,     0,   195,     0,     0,   196,     0,     0,     0,     0,
+       0,     0,   148,     0,     0,   147,     0,     0,   143,     0,
+       0,     0,     0,   369,     0,   175,   174,     0,     0,     0,
+     379,     0,     0,     0,     0,    43,     0,     0,     0,   346,
+       0,     0,     0,    66,    73,    75,     0,    81,     0,    28,
+       0,     0,     0,     0,     0,     0,     0,   112,    97,   110,
+     122,   127,     0,   119,    87,    88,   137,     0,   131,     0,
+       0,     0,     0,     0,     0,   223,     0,     0,   137,     0,
+       0,     0,     0,   134,   133,     0,     0,     0,     0,    84,
+      85,     0,     0,     0,     0,     0,    39,     0,     0,     0,
+      41,    56,     0,   373,     0,   246,   247,   248,   249,   115,
+       0,     0,     0,     0,   342,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   188,     0,     0,
+       0,     0,     0,   368,   176,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    79,     0,     0,   228,   129,     0,
+     209,     0,     0,   211,     0,     0,   213,     0,     0,     0,
+     224,     0,   184,     0,   137,     0,     0,     0,   106,    86,
+     252,   253,   254,   255,     0,    47,     0,    53,     0,     0,
+      92,   229,     0,   341,   197,     0,     0,   204,   198,     0,
+       0,   206,   199,     0,     0,   208,     0,     0,     0,   190,
+       0,   146,     0,     0,     0,     0,     0,     0,     0,   120,
+       0,   215,     0,   217,     0,   219,   225,   227,   189,   185,
+       0,     0,     0,     0,    44,     0,    51,     0,     0,     0,
+     200,     0,     0,   201,     0,     0,   202,     0,     0,   150,
+       0,   144,     0,    45,     0,     0,   170,     0,     0,     0,
+       0,     0,     0,   191,     0,     0,     0,     0,     0,   210,
+       0,   212,     0,   214,     0,   145,    46,    48,     0,    49,
+       0,     0,     0,     0,     0,     0,    54,   216,   218,   220,
+      50,    52
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     3,    69,   713,    70,    71,   441,  1047,  1053,
-     634,   814,  1199,  1346,   635,  1309,  1372,   636,  1348,   637,
-     638,   818,   141,   241,    72,   751,  1084,   980,   510,   369,
+      -1,     2,     3,    69,   715,    70,    71,   441,  1052,  1058,
+     636,   818,  1205,  1352,   637,  1315,  1378,   638,  1354,   639,
+     640,   822,   141,   241,    72,   753,  1089,   984,   510,   369,
      370,   371,   372,   338,   309,   310,    75,    76,    77,    78,
-      79,    80,   339,   779,  1267,  1324,   588,  1104,  1107,  1110,
-    1289,  1293,  1297,  1335,  1338,  1341,   775,   776,  1093,   882,
-     748,   562,   596,    82,    83,    84,    85,    86,   356,   144,
-     382,   193,   941,   942,   365,   358,   553,   221,   704,   846,
+      79,    80,   339,   783,  1273,  1330,   590,  1110,  1113,  1116,
+    1295,  1299,  1303,  1341,  1344,  1347,   779,   780,  1098,   886,
+     750,   562,   598,    82,    83,    84,    85,    86,   356,   144,
+     382,   193,   945,   946,   365,   358,   553,   221,   706,   850,
      432,   433
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1126
+#define YYPACT_NINF -1143
 static const yytype_int16 yypact[] =
 {
-    3354,    52,    47,  3462, -1126, -1126,  1642,    51,    43,   -70,
-      36,    70,   106,   122,   -81,    -1,    80,   -66,   149,   150,
-     -12,   160,   181,   136,   281,   286,   295,   305,   410,   297,
-     861,   536,   152,   223,   314,   226,   514,   514,   247,   148,
-      24,   318,   377,   362,    29,   280,   388,   436,   440,   447,
-     312,   350,   358,    21,    19, -1126,   365, -1126,   461,   339,
-   -1126,   509,   517,    15,    31,   382,   398,   403,   404, -1126,
-   -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126,    28,   370,
-     887, -1126, -1126, -1126,   159,   180,   228,   293,   347,   369,
-     451,   475,   523,   543,   554,   568,   571,   589,   642,   647,
-     684,   700,   716,   722,   723,   420,   427,   437,   444, -1126,
-     546,   455,   462,   470, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126,  3238,  3238,  3238, -1126, -1126,  3238,  2831,    23,   548,
-     405,  3238,   550,   671, -1126,   586,   611,  3238,   590, -1126,
-    3238, -1126, -1126, -1126,  3238,  3065,  3238,  3238,   487,  3238,
-    3065,  3238,  3238,   495,  3065,  3238,  3238,  2074,   496,   459,
-     499,   500,  1790,  1790,  1790,   503, -1126, -1126, -1126, -1126,
-     519,   532,   537,  2074,  2074,   683,  2074,   514,   514,   514,
-    3238,  3238,   225, -1126,   248,   514,   556,   560,   581,  3018,
-     299,   -57,   598,   599,  1790,  2074,   610,    18,   601, -1126,
-     809, -1126,   625,   666,   687,   838,  3238,  3238,  3238,   690,
-    3238,   698,   750,  3238,  3238, -1126,  3238,   846, -1126,   849,
-   -1126,   854, -1126,   467,   467,   467,   467,   739,  3238,   884,
-     759, -1126, -1126, -1126,   893,  3238,  3238,  3238,  3238,  3238,
-    3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,
-    3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,
-    3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,
-    3238,  3238,  3238,  3238,  3238,  3238,  3238,   467,   467,   467,
-     467,  3238,   467,   467,   467,   544,   758,   758,   758,  5456,
-      41,  3065,  4720,   220,   770,   909,   776,   777, -1126,   784,
-    2859,   745, -1126, -1126,  3238,  3238,  3238,  3238,  3238,  3238,
-    3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238,  3238, -1126,
-   -1126,   953,  -115,  4018,  5477,   706,   788,  3065, -1126, -1126,
-    2282, -1126,   665,  5498,  5519,  3238,  5540,   734,  5561,  5582,
-    3238,   744,  5603,  5624,  2216,  1493,  2316,   935, -1126,  3238,
-    3238,  3238,  3238, -1126, -1126,   936,   943,   943,  3238,   842,
-     845,   857,   870,  3238,  3238,  3238,   974,   982,   853,   998,
-      49, -1126, -1126,  4044,  4070,   514,   514,   405,   405,   324,
-    3238,  3238,  3238,  3018,  3018,  3238,  2859,   366, -1126,  3238,
-    3238,  3238,  3238,  1011,  1017,  3238,  1026, -1126,  3238,  3238,
-      54, -1126,  3065,  3238,  3238, -1126,  5645,  5666,  5687,   937,
-    4096, -1126,   885,  2352,  5708,  4743, -1126, -1126,   771, -1126,
-    1675,   749,   892, -1126,   894,   895,   896,  3238,  4766,   260,
-    3238,     1, -1126,  5729,  4789,  5750,  4812,  5771,  4835,  5792,
-    4858,  5813,  4881,  5834,  4904,  5855,  4927,  5876,  4950,  5897,
-    4973,  5918,  4996,  5939,  5019,  4122,  4148,  5960,  5042,  5981,
-    5065,  6002,  5088,  6023,  5111,  6044,  5134,  6065,  5157,  4174,
-    4200,  4226,  4252,  4278,  4304,   -34,   888,   897,   898,  1088,
-     912,   901,   913,  3238, -1126,  2074,  2074,   763,    68,   887,
-    3238,  1040,  1043,    22,   919, -1126,   -14,   147,   155,    88,
-   -1126, -1126,  2424,  1346,   922,  1446,  1446,   769,   769,   769,
-     769,   164,   164,   758,   758,   758,   758, -1126,     2,  3065,
-    3238,  1059,  2870,  3238,   758, -1126,  3238,  3065,  3065,   968,
-    1061,  1062,  6086,  1063,   972,  1065,  1066,  6107,   975,  1068,
-    1084,  3065, -1126,   779,  2358,  3238,  6128,  2988,  6149,  6170,
-    3238,  2074,  1093,  1086,  6191,  3201,  3201,  3201,  3201,  6212,
-    6233,  6254,  2074,  2074,   951, -1126,   514,  3238,  3238, -1126,
-   -1126,   949,   950,  3238,  4330,  4356,  4382,  2929,     9,   514,
-    1826,  6275,  3149,  6296,  6317,  3238,  1097,  3238,  6338, -1126,
-    5180,  5203, -1126,   782,  5226,  5249,  1098,  1099,  1100,   957,
-    3238,  1968,  3238,  3238, -1126,    30, -1126, -1126,  3238,  1104,
-    1103,  1105,  1106,  1107,  5272,   341, -1126,  3194, -1126,   973,
-     976,   965, -1126,  1111, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126,  3238,  3238, -1126, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126, -1126, -1126, -1126, -1126,  3238,  3238,  3238,  3238,  3238,
-    3238, -1126,  3065,   467, -1126, -1126, -1126,  3238, -1126,   467,
-    5295,  1112,  1115,   977, -1126,    27,  3238,  1118,  1121,  1242,
-   -1126,  1122,   985,    21,  1125, -1126,  3065,  3065,  3065,  3065,
-    3238, -1126,  1002,   467,   -10,  4408,   514, -1126,  3065,  3353,
-    2458,   758, -1126,  2282, -1126,  1081,  2074,  2074,  1128,  2074,
-     882,  2074,  2074,  1129,  1083,  2074,  2074,   790, -1126,  3065,
-    1305,  1131,  1133,  1134,  1135,  2682, -1126, -1126,  1137, -1126,
-    1140,  1004,  6569, -1126,  1005,  1006,  1007,  1146,  1148,  1150,
-    1152,  1153,  1156,   409,  4434,  4460, -1126, -1126,  3458,   514,
-     514,   514,  1155,  1012,  1021,   -30, -1126,   466, -1126,     9,
-    1159,  1162,  1163,  1165,  6569, -1126,  1329,  1024,  1171,  1176,
-    1136,  1180,  1181,  2074,  2074,  2074,  1185,  4486, -1126,  2494,
-     632,  1187,  1188,  5318, -1126,  1044,  1047,  1048,  1049,  1194,
-    1189, -1126,  1197, -1126,  1064,  3238,  3238,  2074,  1055, -1126,
-    6359,  5341,  6380,  5364,  6401,  5387,  6422,  5410,    58,  1082,
-    6443,  1085,   -96, -1126, -1126,   206,   325,  1080,  1199,  1416,
-   -1126, -1126, -1126,    21,  3238, -1126,   797, -1126,   798,   802,
-     805,   806,  6569, -1126,  1203,     7,  3238,    62,   811, -1126,
-    3238,  1060,  1169,  1169,  2074,  1225,  1087,  1089,  1226,  1227,
-    2074,  1090,  1228,  1229, -1126,   812, -1126,  1231,  2074,  2074,
-    2074,  1237,  1239, -1126,  2074,  1240,  1244,  1246,  1247,  2074,
-    2074,  2074, -1126, -1126,   282,  3238,  3238,  3238,  1096,   -55,
-     -52,   201, -1126,  2074,  3238, -1126, -1126,  3018,   -11,  1932,
-   -1126,  1110,  2500, -1126,  3065, -1126, -1126,  1114, -1126, -1126,
-    1250,  1251,  1166, -1126,  3238,  3238,  3238, -1126,  1256,  1259,
-    1120,  2074,  2074,  2074,  2074, -1126,   260, -1126,  3238,  4512,
-    4538,   815, -1126,  3238, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126, -1126, -1126, -1126, -1126, -1126,  2074,   887,  3238,  1262,
-    1265,    22, -1126,  1264,  5433,    21, -1126,  1266,  1267,  1269,
-    1270, -1126, -1126,   467,  4564, -1126,  1132,  6569,  3238,   514,
-    1275,  1277,  1278, -1126,  3238,  3238, -1126, -1126,  1282,  3238,
-   -1126, -1126, -1126,  1284,  1306,  1308,  1172,  3238, -1126,  1309,
-    2074,  2074,  2074,  2074,  1310,  1313,  1312, -1126,  3201,  3486,
-    6464,  1716,   405,   514,  1315,   514,  1317,   514,  1318,   288,
-    1177,  6485,  3514,   492, -1126,  1319,  1276,  1324,   514,  1276,
-    1325,   818,  3238, -1126, -1126,  2074,  2863,   593,  6506, -1126,
-    2642,  1328,  1192,  1201,  1202,  1204, -1126,    72,  6569,  3238,
-    3238,  2074,  1184,   819,  6569,  1330,  1331,  1486, -1126,  1336,
-    1349, -1126,  1209, -1126, -1126, -1126, -1126, -1126,  1353,  3238,
-   -1126,  3542,   345, -1126, -1126, -1126,  3570,  3598, -1126,  3626,
-    1355, -1126, -1126,  1232,  1356,  6569, -1126,  1357,  1358,  1359,
-    1379, -1126,  1238,  1381, -1126,  1566,  1386,  1243, -1126,  3238,
-   -1126,  1245,   511, -1126,  1248,   516, -1126,  1252,   518, -1126,
-    1253,  1388,  2074,  1390,  1254,  3238, -1126,  2689,   545, -1126,
-     549,   559, -1126,  1389,  3654,  1307,  3238, -1126,  3238, -1126,
-   -1126,  3065,  1858,  1394, -1126,  2074,  2074,  2074,  2074, -1126,
-    3238,  4590,  4616, -1126,  2074,  3238,  1400, -1126, -1126, -1126,
-      21, -1126,  1311, -1126,  4642,  1401,  1405,  1406,  1407,  1409,
-    1268, -1126, -1126, -1126, -1126, -1126,  2074, -1126, -1126, -1126,
-     405,  3058, -1126,  3018,     9,  3018,     9,  3018,     9, -1126,
-     822,  2074, -1126,  3682,   514,  3065,   514, -1126, -1126,  3238,
-    3710,  3738,   825, -1126, -1126,  1272,  1274,  1292,  1293,  1271,
-    6569,  3238,  3238,   826,  6569, -1126,  1410, -1126,  3238, -1126,
-   -1126, -1126, -1126, -1126,  3238,   831,  1294,  3238, -1126,  3766,
-     603,   143,  3794,   605,   254,  3822,   637,   359,  2074,  1411,
-    1354,  2110,  1296,   639,   835,   644,  2000, -1126, -1126,  1422,
-    1442,  1461,  1462,  1463,  3238,  6527,  4668,    37, -1126,  4694,
-    3850,  1466, -1126,  3878,  1479,  3238,  1480,  1481,  3238,  1483,
-    1484,  3238,  1485,  1342, -1126,  3238, -1126,     9, -1126,  3065,
-    1488,  2689, -1126, -1126, -1126, -1126, -1126, -1126,   844, -1126,
-    3238, -1126,  2074,  3238, -1126, -1126,  1489, -1126, -1126,  1348,
-    3906, -1126, -1126,  1351,  3934, -1126, -1126,  1378,  3962, -1126,
-    1499,  2142,   378,  2252,   852, -1126,   708,   860,  1500,  1380,
-    6548,   863,  3990, -1126,     9,  1523,     9,  1525,     9,  1526,
-   -1126, -1126, -1126, -1126,     9,  1527,  3065,  1528, -1126,   467,
-   -1126,  1385,  1530,   387, -1126,  1387,   413, -1126,  1404,   415,
-   -1126,  1417,   435, -1126,   868, -1126,   876, -1126,  1418,  2074,
-   -1126,  1532,     9,  1549,     9,  1550,     9, -1126,  1551,   467,
-    1553,   467,   879, -1126,   452, -1126,   457, -1126,   468, -1126,
-   -1126, -1126,   880, -1126,  1554,  1563,  1564,  1567,   467,  1583,
-   -1126, -1126, -1126, -1126, -1126, -1126
+    3463,    50,     9,  3571, -1143, -1143,  1835,    59,     8,   -32,
+      31,   174,   193,   215,  -103,    91,   150,   144,   181,   209,
+     -36,   218,   228,   276,   312,   324,   327,   340,   184,   351,
+     523,   457,    70,   270,   377,   285,   358,   358,   305,   326,
+      38,   443,   453,   424,    -3,   128,   436,   512,   518,   521,
+     391,   394,   397,    11,    40, -1143,   400, -1143,   540,   405,
+   -1143,   559,   566,     2,    13,   447,   464,   469,   481, -1143,
+   -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143,
+   -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143,    24,   470,
+     189, -1143, -1143, -1143,    92,   279,   322,   410,   421,   433,
+     452,   460,   473,   478,   516,   544,   545,   554,   576,   593,
+     613,   620,   638,   639,   644,   484,   492,   506,   513, -1143,
+     653,   524,   527,   536, -1143, -1143, -1143, -1143, -1143, -1143,
+   -1143,  3284,  3284,  3284, -1143, -1143,  3284,  3024,    10,   678,
+     347,  3284,   704,  1203, -1143,   720,   754,  3284,   686, -1143,
+    3284, -1143, -1143, -1143,  3284,  3211,  3284,  3284,   582,  3284,
+    3211,  3284,  3284,   594,  3211,  3284,  3284,  2267,   598,   592,
+     623,   652,  1983,  1983,  1983,   665, -1143, -1143, -1143, -1143,
+     673,   689,   701,  2267,  3284,   808,  2267,   358,   358,   358,
+    3284,  3284,    -5, -1143,   200,   358,   683,   742,   750,  1209,
+     247,  -100,   709,   713,  1983,  2267,   726,    25,   744, -1143,
+     817, -1143,   753,   766,   768,   867,  3284,  3284,  3284,   767,
+    3284,   765,   819,  3284,  3284, -1143,  3284,   910, -1143,   911,
+   -1143,   913, -1143,    79,    79,    79,    79,   775,  3284,   917,
+     776, -1143, -1143, -1143,   919,  3284,  3284,  3284,  3284,  3284,
+    3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,
+    3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,
+    3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,
+    3284,  3284,  3284,  3284,  3284,  3284,  3284,    79,    79,    79,
+      79,  3284,    79,    79,    79,   575,   785,   785,   785,  5698,
+      39,  3211,  4962,    66,   781,   922,   787,   780, -1143,   782,
+    3645,  1443, -1143, -1143,  3284,  3284,  3284,  3284,  3284,  3284,
+    3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284,  3284, -1143,
+   -1143,  1490,   -78,  4260,  5719,   -42,   788,  3211, -1143, -1143,
+    2875, -1143,    -9,  5740,  5761,  3284,  5782,   637,  5803,  5824,
+    3284,   642,  5845,  5866,  2409,  1520,  2974,   924, -1143,  3284,
+    3284,  3284,  3284, -1143, -1143,   928,   930,   930,  3284,   796,
+     797,   814,   815,  3284,  3284,  3284,   952,  1693,   820,   955,
+     -71, -1143, -1143,  4286,  4312,   358,   358,   347,   347,   158,
+    3284,  3284,  3284,  1209,  1209,  3284,  3645,   287, -1143,  3284,
+    3284,  3284,  3284,   958,   959,  3284,   956, -1143,  3284,  3284,
+    1043, -1143,  3211,  3284,  3284, -1143,  5887,  5908,  5929,   871,
+    4338, -1143,   821,  3018,  5950,  4985, -1143, -1143,  1868, -1143,
+    2019,   662,   824, -1143,   825,   826,   828,  3284,  5008,    68,
+    3284,     6, -1143,  5971,  5031,  5992,  5054,  6013,  5077,  6034,
+    5100,  6055,  5123,  6076,  5146,  6097,  5169,  6118,  5192,  6139,
+    5215,  6160,  5238,  6181,  5261,  4364,  4390,  6202,  5284,  6223,
+    5307,  6244,  5330,  6265,  5353,  6286,  5376,  6307,  5399,  4416,
+    4442,  4468,  4494,  4520,  4546,   -59,   829,   830,   833,  1552,
+     832,   835,   836,  3284, -1143,  2267,  2267,   666,    75,   189,
+    3284,   967,   980,    22,   840, -1143,   187,   227,   -26,   336,
+   -1143, -1143,  3056,   511,   669,   615,   615,   685,   685,   685,
+     685,   597,   597,   785,   785,   785,   785, -1143,     7,  3211,
+    3284,   981,  3063,  3284,   785, -1143,  3284,  3211,  3211,   890,
+     983,   985,  6328,   986,   895,   989,   990,  6349,   900,   994,
+     996,  3211, -1143,   679,  2551,  3284,  6370,  3135,  6391,  6412,
+    3284,  2267,  1000,   999,  6433,  3347,  3347,  3347,  3347,  6454,
+    6475,  6496,  2267,  3284,  2409,  1001,   859, -1143,   358,  3284,
+    3284, -1143, -1143,   861,   864,  3284,  4572,  4598,  4624,  4234,
+     221,   358,  2161,  6517,  3314,  6538,  6559,  3284,  1004,  3284,
+    6580, -1143,  5422,  5445, -1143,   680,  5468,  5491,  1009,  1010,
+    1011,   872,  3284,  2303,  3284,  3284, -1143,    27, -1143, -1143,
+    3284,  1017,  1015,  1016,  1019,  1020,  5514,   321, -1143,  3462,
+   -1143,   881,   886,   880, -1143,  1027, -1143, -1143, -1143, -1143,
+   -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143,
+   -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143,
+   -1143, -1143, -1143,  3284,  3284, -1143, -1143, -1143, -1143, -1143,
+   -1143, -1143, -1143, -1143, -1143, -1143, -1143,  3284,  3284,  3284,
+    3284,  3284,  3284, -1143,  3211,    79, -1143, -1143, -1143,  3284,
+   -1143,    79,  5537,  1028,  1029,   891, -1143,    16,  3284,  1030,
+    1032,  1653, -1143,  1033,   896,    11,  1036, -1143,  3211,  3211,
+    3211,  3211,  3284, -1143,   915,    79,   -53,  4650,   358, -1143,
+    3211,  3646,  3204,   785, -1143,  2875, -1143,   991,  2267,  2267,
+    1039,  2267,   786,  2267,  2267,  1040,   997,  2267,  2267,   690,
+   -1143,  3211,  1761,  1047,  1050,  1051,  1052,  2993, -1143, -1143,
+    1044, -1143,  1053,   918,  6811, -1143,   921,   923,   925,  1054,
+    1059,  1063,  1065,   818,  1174,  3284,  1068,   304,  4676,  4702,
+   -1143, -1143,  3674,   358,   358,   358,  1067,   926,   931,   -31,
+   -1143,   366, -1143,   221,  1071,  1069,  1072,  1073,  6811, -1143,
+    2051,   932,  1075,  1077,  1034,  1078,  1079,  2267,  2267,  2267,
+    1083,  4728, -1143,  3277,  1513,  1084,  1097,  5560, -1143,   954,
+     960,   962,   963,  1102,  1105, -1143,  1108, -1143,   973,  3284,
+    3284,  2267,   969, -1143,  6601,  5583,  6622,  5606,  6643,  5629,
+    6664,  5652,   349,   976,  6685,   977,   142, -1143, -1143,    82,
+     289,   978,  1116,  2193, -1143, -1143, -1143,    11,  3284, -1143,
+     694, -1143,   698,   699,   702,   706,  6811, -1143,  1118,    47,
+    3284,     5,   710, -1143,  3284,   982,  1074,  1074,  2267,  1121,
+     987,   988,  1124,  1133,  2267,   992,  1135,  1137, -1143,   711,
+   -1143,  1139,  2267,  2267,  2267,  1142,  1144, -1143,  2267,  1141,
+    1146,  1148,  1149,  2267,  2267,  2267, -1143,  1693,   335,  3284,
+    3284,  3284,  1008,   -47,   194,   249, -1143,  2267,  3284, -1143,
+   -1143,  1209,   -28,  2125, -1143,  1012,  2693, -1143,  3211, -1143,
+   -1143,  1014, -1143, -1143,  1145,  1159,  1081, -1143,  3284,  3284,
+    3284, -1143,  1160,  1161,  1022,  2267,  2267,  2267,  2267, -1143,
+      68, -1143,  3284,  4754,  4780,   714, -1143,  3284, -1143, -1143,
+   -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143,
+    2267,   189,  3284,  1168,  1163,    22, -1143,  1172,  5675,    11,
+   -1143,  1177,  1178,  1180,  1181, -1143, -1143,    79,  4806, -1143,
+    1042,  6811,  3284,   358,  1184,  1185,  1186, -1143,  3284,  3284,
+   -1143, -1143,  1187,  3284, -1143, -1143, -1143,  1190,  1191,  1192,
+    1100,  3284, -1143,  1194,  2267,  2267,  2267,  2267,  1197,  1201,
+    1200,  1204, -1143,  3347,  3702,  6706,  1909,   347,   358,  1205,
+     358,  1210,   358,  1215,   315,  1058,  6727,  3730,   370, -1143,
+    1216,  1365,  1239,   358,  1365,  1240,   715,  3284, -1143, -1143,
+    2267,  3590,   643,  6748, -1143,  2835,  1211,  1098,  1099,  1101,
+    1103, -1143,   368,  6811,  3284,  3284,  2267,  1046,   719,  6811,
+    1245,  1247,  2335, -1143,  1249,  1248, -1143,  1112, -1143, -1143,
+   -1143, -1143, -1143,  1254,  3284, -1143,  3758,   584, -1143, -1143,
+   -1143,  3786,  3814, -1143,  3842,  1257, -1143, -1143,  1214,  1260,
+    6811, -1143,  1261,  1262,  1264,  1266, -1143,  1123,  1268, -1143,
+   -1143,  2477,  1269,  1126, -1143,  3284, -1143,  1127,   395, -1143,
+    1129,   402, -1143,  1131,   466, -1143,  1132,  1271,  2267,  1277,
+    1143,  3284, -1143,  2882,   468, -1143,   477,   532, -1143,  1281,
+    3870,  1195,  3284, -1143,  3284, -1143, -1143,  3211,  2619,  1286,
+   -1143,  2267,  2267,  2267,  2267, -1143,  3284,  4832,  4858, -1143,
+    2267,  3284,  1290, -1143, -1143, -1143,    11, -1143,  1217, -1143,
+    4884,  1291,  1306,  1307,  1309,  1312,  1170, -1143, -1143, -1143,
+   -1143, -1143,  2267, -1143, -1143, -1143,   347,  3618, -1143,  1209,
+     221,  1209,   221,  1209,   221, -1143,   723,  2267, -1143,  3898,
+     358,  3211,   358, -1143, -1143,  3284,  3926,  3954,   727, -1143,
+   -1143,  1193,  1198,  1199,  1202,  1171,  6811,  3284,  3284,   728,
+    6811, -1143,  1319, -1143,  3284, -1143, -1143, -1143, -1143, -1143,
+    3284,   731,  1207,  3284, -1143,  3982,   535,   -18,  4010,   552,
+     -15,  4038,   560,   147,  2267,  1335,  1280,  2445,  1212,   562,
+     732,   574,  2651, -1143, -1143,  1342,  1345,  1354,  1355,  1357,
+    3284,  6769,  4910,    32, -1143,  4936,  4066,  1360, -1143,  4094,
+    1359,  3284,  1361,  1364,  3284,  1366,  1367,  3284,  1371,  1220,
+   -1143,  3284, -1143,   221, -1143,  3211,  1372,  2882, -1143, -1143,
+   -1143, -1143, -1143, -1143,   735, -1143,  3284, -1143,  2267,  3284,
+   -1143, -1143,  1394, -1143, -1143,  1252,  4122, -1143, -1143,  1255,
+    4150, -1143, -1143,  1256,  4178, -1143,  1398,  2686,   223,  2587,
+     736, -1143,   579,   739,  1401,  1258,  6790,   747,  4206, -1143,
+     221,  1403,   221,  1404,   221,  1406, -1143, -1143, -1143, -1143,
+     221,  1407,  3211,  1408, -1143,    79, -1143,  1265,  1410,   253,
+   -1143,  1267,   264, -1143,  1270,   388, -1143,  1272,   401, -1143,
+     748, -1143,   755, -1143,  1273,  2267, -1143,  1412,   221,  1413,
+     221,  1415,   221, -1143,  1418,    79,  1420,    79,   758, -1143,
+     406, -1143,   414, -1143,   438, -1143, -1143, -1143,   759, -1143,
+    1421,  1422,  1423,  1424,    79,  1426, -1143, -1143, -1143, -1143,
+   -1143, -1143
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-   -1126, -1126, -1126, -1126,   735, -1126, -1126, -1126, -1126,   255,
-   -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126, -1126,  -299,     4, -1126,  -332, -1126,   728,  1589, -1126,
-   -1126, -1126, -1126,     3,  -376,  -192, -1126, -1126, -1126, -1126,
-   -1126, -1126,  1590, -1126, -1126, -1126, -1126, -1126, -1126, -1126,
-   -1126, -1126, -1126, -1126, -1126, -1126,  -609,  -705,   343, -1126,
-   -1126,  1230, -1126, -1126, -1126, -1126, -1126, -1126,    -6, -1126,
-     -21, -1126, -1125,   449,  -124,    73,  -125,  -682,   634, -1126,
-    -233,     8
+   -1143, -1143, -1143, -1143,   507, -1143, -1143, -1143, -1143,   183,
+   -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143, -1143,
+   -1143, -1143,  -298,    35, -1143,    63, -1143,   577,  1439, -1143,
+   -1143, -1143, -1143,     3,  -384,  -197, -1143, -1143, -1143, -1143,
+   -1143, -1143,  1444, -1143, -1143, -1143, -1143, -1143, -1143, -1143,
+   -1143, -1143, -1143, -1143, -1143, -1143,  -726,  -720,   191, -1143,
+   -1143,  1086, -1143, -1143, -1143, -1143, -1143, -1143,    -6, -1143,
+     -20, -1143, -1142,   557,  -104,   126,  -128,  -681,   490, -1143,
+    -213,    19
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -5
+#define YYTABLE_NINF -260
 static const yytype_int16 yytable[] =
 {
-     143,   434,   435,   436,   500,   628,    74,   396,   711,   158,
-     142,   581,   582,   972,   145,   192,   194,   410,   200,  1203,
-     229,   845,   406,   222,   407,   219,   702,   303,   201,   528,
-     342,   836,   237,   207,   529,   347,   231,   801,   428,   351,
-     430,  1215,   149,  1281,   134,   135,   772,     5,   495,   366,
-     367,   810,   773,   774,   485,   486,   487,   488,     4,   490,
-     491,   492,   154,   163,   146,   772,     7,     8,   975,   155,
-     906,   773,   774,   148,   202,   694,   151,   159,   385,   386,
-     403,   385,   386,   203,   160,   772,   399,   629,   630,   631,
-     632,   773,   774,   400,  1013,   147,  1014,  1015,   244,  1016,
-     506,    15,    16,   507,    18,    19,   508,    21,   509,    23,
-     681,    24,   152,    26,    27,   682,    29,    30,    31,   304,
-     305,   905,    34,   837,   838,   296,   297,   298,   153,   154,
-     299,   302,   712,   208,   855,   311,   706,   712,   164,   538,
-    1024,   331,   156,   308,   333,    50,    51,    52,   334,   340,
-     343,   344,   633,   346,   340,   348,   349,  1311,   340,   352,
-     353,   963,   223,   408,   496,   230,   380,   381,   134,   135,
-     908,   220,   703,   238,   389,   239,   497,   802,   397,   209,
-     240,   232,   385,   386,   383,   384,   150,  1282,   127,   128,
-     129,   130,   167,   384,   196,   385,   386,   197,   576,   696,
-     198,   183,   952,   906,   184,   602,   590,   538,   134,   135,
-     416,   417,   418,   694,   420,   695,  1139,   423,   424,   772,
-     425,  1140,   158,   157,  1362,   773,   774,   499,   341,   611,
-     163,   166,   438,   341,   754,   755,   756,   341,   709,   443,
+     143,   207,   396,   583,   584,   500,    74,   229,  1209,     5,
+     630,   979,   410,   713,   303,   219,   192,   194,   231,   200,
+     840,   434,   435,   436,   849,   145,   704,   342,   237,   406,
+    1221,   407,   347,   428,   805,   430,   351,   149,  1287,   163,
+     154,   142,   201,   399,   222,   776,   495,   155,   776,   163,
+     400,   777,   778,   976,   777,   778,     4,   912,   776,   910,
+     147,   776,   385,   386,   777,   778,   528,   777,   778,   366,
+     367,   529,   146,   499,   485,   486,   487,   488,   578,   490,
+     491,   492,   696,   431,   243,   683,   385,   386,   202,   696,
+     684,   859,   631,   632,   633,   634,   538,   203,   134,   135,
+     403,   208,  1018,   532,  1019,   239,   304,   305,   140,   244,
+     240,   148,   841,   842,   164,   115,   116,   117,   118,   183,
+     909,   119,   184,  1029,   710,   296,   297,   298,   385,   386,
+     299,   302,   210,  1262,   211,   311,  1265,   714,   385,   386,
+     538,   331,   539,   308,   333,   387,  1317,   209,   334,   340,
+     343,   344,   230,   346,   340,   348,   349,   635,   340,   352,
+     353,   220,   496,   232,   134,   135,   967,   380,   381,   238,
+     408,   239,   705,   497,   806,   389,   240,   714,   377,   397,
+     151,   150,  1288,   223,   383,   384,   127,   128,   129,   130,
+     122,   123,   910,   384,   243,   127,   128,   129,   130,   152,
+     698,   592,   127,   128,   129,   130,   134,   135,   134,   135,
+     416,   417,   418,  1368,   420,   134,   135,   423,   424,   158,
+     425,   153,   697,   776,   613,   115,   116,   117,   118,   777,
+     778,   119,   438,   172,   156,   245,   173,   246,   174,   443,
      444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
      454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
      464,   465,   466,   467,   468,   469,   470,   471,   472,   473,
      474,   475,   476,   477,   478,   479,   480,   481,   482,   483,
-     484,   188,   189,  1063,   210,   489,   211,   603,  1007,  1008,
-     159,   190,   161,   162,  1256,   340,   536,   707,   199,   325,
-     326,   327,   245,   165,   246,   708,   328,   501,   512,   513,
+     484,   341,   134,   135,   605,   489,   341,   159,  1068,   814,
+     341,   385,   386,   157,   160,   340,   961,   776,  1268,   776,
+     122,   123,   158,   777,   778,   777,   778,   585,   512,   513,
      514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
-     524,   525,   526,   247,   166,   248,   127,   128,   129,   130,
-     772,   534,   957,   168,   385,   386,   773,   774,   169,   542,
-     127,   128,   129,   130,   547,   431,   243,   170,   534,   340,
-    1017,   175,  1018,   556,   557,   558,   559,   171,   385,   386,
-     134,   135,   564,   186,   579,   580,   185,   569,   570,   571,
-     204,   249,   381,   250,   341,   387,   187,   115,   116,   117,
-     118,   385,   386,   119,   584,   585,   586,   296,   297,   587,
-     308,   308,   812,   591,   592,   593,   594,   195,   388,   598,
-     134,   135,   600,   601,   714,  1259,   340,   604,   605,   307,
-     535,   206,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   554,   326,   327,   737,   535,   341,   205,
-     328,   624,   385,   386,   627,   772,   251,   212,   252,  1111,
-     213,   773,   774,   626,   214,   127,   128,   129,   130,   398,
-     829,   215,   122,   123,   772,   216,   831,   385,   386,   172,
-     773,   774,   173,   772,   174,   134,   135,   225,  1206,   773,
-     774,   431,   243,   583,    35,    36,    37,    38,   385,   386,
-     854,   134,   135,    43,   226,   341,    46,   690,   810,   772,
-     253,   772,   254,   217,   699,   773,   774,   773,   774,   385,
-     386,   218,   697,   115,   116,   117,   118,   698,   224,   119,
-    1262,   772,   255,   227,   256,   589,   906,   773,   774,   906,
-     242,   228,   906,   340,   715,   233,   690,   719,   772,  1322,
-     720,   721,   723,   772,   773,   774,   956,   958,  1351,   773,
-     774,   234,   385,   386,   772,   340,   235,   236,   721,   740,
-     773,   774,   306,   291,   745,   763,   312,   828,   895,   752,
-     752,   752,   752,   287,  1353,  1221,  1355,  1224,   777,  1227,
-     288,   764,   765,   753,   753,   753,   753,   768,   122,   123,
-     289,   848,   849,   850,   851,   180,  1357,   290,   181,   784,
-     182,   786,   329,   858,   257,   332,   258,   906,   292,   385,
-     386,  1128,   341,  1375,   797,   293,   799,   800,  1376,   360,
-     722,   724,   803,   294,   875,   907,   357,   330,   259,  1377,
-     260,   364,   364,   364,   341,   385,   386,   722,   906,   811,
-     345,   906,   376,   377,   906,   379,  1101,   906,   350,   359,
-     926,  1115,   361,   362,   385,   386,   368,   188,   189,   385,
-     386,   385,   386,   364,   404,   820,   821,   190,  1302,   906,
-    1173,   906,   373,   906,   191,  1175,   261,  1177,   262,   822,
-     823,   824,   825,   826,   827,   374,   340,   313,   385,   386,
-     375,   830,   385,   386,   134,   135,   263,   378,   264,   493,
-     839,   239,   385,   386,  1184,   857,   240,   265,  1185,   266,
-     340,   340,   340,   340,   852,  1333,   390,  1336,  1186,  1339,
-     391,   267,   340,   268,   269,  1342,   270,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   392,   271,   340,   272,   328,   385,   386,   385,   386,
-    1068,   401,   402,  1364,  1129,  1366,   409,  1368,   899,   900,
-     901,   511,  1255,   405,  1258,   341,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     385,   386,   385,   386,   328,   412,   927,   385,   386,   341,
-     341,   341,   341,     7,     8,   273,  1261,   274,  1269,  1031,
-     275,   341,   276,  1271,  1216,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   939,
-     940,   413,   341,   328,   538,   411,   539,   506,    15,    16,
-     507,    18,    19,   508,    21,   509,    23,   277,    24,   278,
-      26,    27,   414,    29,    30,    31,   811,   419,   964,    34,
-     959,   385,   386,   279,   415,   280,   134,   135,   421,   422,
-     974,   532,   426,   239,   977,   427,   140,  1326,   240,   281,
-     429,   282,    50,    51,    52,   283,   285,   284,   286,   314,
+     524,   525,   526,   536,   161,   431,   243,   385,   386,   776,
+     154,   534,   167,   385,   386,   777,   778,   708,   501,   542,
+     776,  1012,  1013,  1020,   547,  1021,   777,   778,   534,   340,
+     388,   307,   162,   556,   557,   558,   559,   115,   116,   117,
+     118,   165,   564,   119,   168,   581,   582,   569,   570,   571,
+     159,   166,   196,   381,  1328,   197,   169,   709,   198,   170,
+     385,   386,   385,   386,   586,   587,   588,   296,   297,   589,
+     308,   308,   171,   593,   594,   595,   596,   398,  1022,   600,
+    1023,   716,   602,   603,  1357,   175,   340,   606,   607,   127,
+     128,   129,   130,   185,   816,  1359,    35,    36,    37,    38,
+     385,   386,   247,   739,   248,    43,   186,   341,    46,   134,
+     135,   626,   122,   123,   629,   187,   591,   385,   386,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   538,   437,   544,  1023,   328,   439,  1009,
-    1010,  1011,   243,   538,   618,   548,   619,  1019,  1021,   442,
-     328,  1022,   323,   324,   325,   326,   327,   176,   340,   440,
-     177,   328,   538,   178,   693,   179,   503,   502,  1036,  1037,
-    1038,   504,   616,   115,   116,   117,   118,   140,   538,   119,
-     738,   538,  1048,   790,   866,   505,   867,  1054,   533,   538,
-    1046,   874,   555,   560,   691,   692,   965,   538,   966,   967,
-     561,   538,  1057,   968,   538,   538,   969,   970,  1072,   527,
-     538,   538,   976,   992,  1051,  1056,  1052,   538,  1145,  1123,
-    1146,  1228,  1071,  1229,   538,  1051,  1239,  1247,  1076,  1077,
-    1051,   572,  1251,  1079,   538,   565,  1270,   341,   566,   573,
-    1231,  1085,  1102,  1145,  1105,  1308,  1108,   574,   122,   123,
-     567,   538,  1095,  1325,   575,  1118,  1192,  1120,  1121,   538,
-     746,  1327,  1051,   568,  1331,   308,  1096,   538,   595,  1358,
-     340,   760,   761,   340,   597,  1359,  1124,  1360,  1051,  1378,
-    1374,  1379,   599,   609,  1132,   612,   620,   683,   621,   622,
-     623,   684,   685,  1141,  1142,   688,   700,   701,  1133,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-    1234,   687,   689,  1154,   328,   705,   716,   725,   726,   727,
-     729,   730,   731,   732,   734,   735,  1303,   314,   315,   316,
+     554,   326,   327,   899,  1227,   195,  1230,   328,  1233,   188,
+     189,   134,   135,   535,   776,   249,  1117,   250,   814,   190,
+     777,   778,   833,   206,   628,  1212,   199,   776,   835,   166,
+     535,   341,   776,   777,   778,   212,   711,   692,   777,   778,
+     776,   188,   189,   956,   701,   204,   777,   778,   538,   385,
+     386,   190,   858,   385,   386,   205,   180,   910,   191,   181,
+     910,   182,  1145,   910,   776,   911,   213,  1146,   700,  1121,
+     777,   778,   214,   340,   717,   215,   692,   721,   385,   386,
+     722,   723,   725,   699,   216,   385,   386,   217,   341,  1361,
+     218,   960,   962,   224,  1179,   340,   225,  1308,   723,   742,
+     226,  1181,  1363,   251,   747,   252,   832,  1381,   767,   754,
+     754,   754,   754,   227,   253,  1382,   254,   763,   764,   176,
+     228,   781,   177,   768,   769,   178,   255,   179,   256,   772,
+     852,   853,   854,   855,   755,   755,   755,   755,   910,  1383,
+     233,   788,   862,   790,  1339,   257,  1342,   258,  1345,   385,
+     386,   385,   386,   259,  1348,   260,   801,   234,   803,   804,
+     385,   386,   235,   879,   807,  1183,   261,  1190,   262,   910,
+     242,   263,   910,   264,   236,   910,  1191,   287,   910,   756,
+     757,   758,  1370,  1107,  1372,   288,  1374,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   289,
+     910,  1134,   910,   328,   910,   341,   290,   824,   825,   265,
+     291,   266,   815,   724,   726,   385,   386,   292,   385,   386,
+     293,   826,   827,   828,   829,   830,   831,   341,   340,   294,
+     724,  1192,   306,   834,  1261,   385,   386,   267,   269,   268,
+     270,   332,   843,   385,   386,   385,   386,   271,   861,   272,
+     535,  1264,   340,   340,   340,   340,   856,   385,   386,  1267,
+     312,  1275,   385,   386,   340,   134,   135,   385,   386,   273,
+     493,   274,   239,  1277,   357,   345,   329,   240,  1332,   364,
+     364,   364,   325,   326,   327,   340,   275,   350,   276,   328,
+     376,   359,   360,   379,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   903,   904,   905,   277,   328,   278,   897,
+     330,   364,   404,   279,  1073,   280,   361,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   281,   283,   282,   284,   328,   538,   285,   544,   286,
+    1036,   538,  1222,   548,  1135,   362,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   620,   368,   621,
+     341,   328,   378,   943,   944,   538,   373,   695,   323,   324,
+     325,   326,   327,   411,  -259,  -259,  -259,   328,   538,   538,
+     740,   794,   374,   390,   341,   341,   341,   341,   870,   538,
+     871,   878,   968,   969,   375,   970,   341,   538,   538,   971,
+     972,   538,   401,   973,   978,   538,   402,   974,   981,   538,
+     538,   980,   996,  1056,   538,  1057,  1129,   341,  1151,   405,
+    1152,   815,  1234,   415,  1235,   963,   538,  1056,  1245,  1253,
+    1056,   538,  1257,  1276,  1151,   538,  1314,  1331,   538,   409,
+    1333,  1028,   391,  1014,  1015,  1016,  1056,   538,  1337,  1364,
+     392,  1024,  1026,   412,  1365,  1027,  1366,  1056,  1384,  1380,
+    1385,   413,   340,   414,   419,   421,   426,   427,   422,   429,
+     437,   439,  1041,  1042,  1043,   442,   440,   328,   502,   503,
+     140,   555,   504,   505,   575,   560,  1053,   561,   533,   565,
+     566,  1059,  -259,  -259,  -259,  -259,  -259,  -259,  -259,  -259,
+    -259,  -259,  -259,  -259,  -259,  -259,  1062,   567,   568,   572,
+     328,   577,   601,  1077,   576,   597,   599,   611,   622,   623,
+     624,   614,   625,   702,   686,  1051,  1076,   687,   685,   690,
+    1061,   689,  1081,  1082,   703,   691,   707,  1084,   718,   727,
+     728,  1237,   729,   731,   732,  1090,   733,   734,  1108,   736,
+    1111,   737,  1114,   738,   749,   751,   766,  1101,   765,  1198,
+     789,  1124,   770,  1126,  1127,   771,   797,   798,   799,   800,
+     308,   808,   809,   810,   819,   340,   811,   812,   340,   820,
+     821,  1130,  1102,   823,   837,   838,   844,   839,   845,  1138,
+     847,   848,   851,   865,   341,   857,   868,   874,  1147,  1148,
+     887,   875,   693,   694,   881,     7,     8,   882,   883,   884,
+     888,   893,   889,  1240,  1139,   890,   894,   891,  1160,   892,
+     895,   896,   898,   906,   908,   914,   907,  1309,   913,   915,
+     916,   919,   918,   920,   922,   923,   921,   927,   932,   506,
+      15,    16,   507,    18,    19,   508,    21,   509,    23,  1177,
+      24,   933,    26,    27,   935,    29,    30,    31,   939,   940,
+     936,    34,   937,   938,   941,  1189,   942,   534,   748,   947,
+     957,   959,  1353,   965,   975,   964,  1196,   987,  1197,   762,
+     990,   340,   982,   983,    50,    51,    52,   988,   989,   991,
+    1206,   994,   993,   995,   997,  1210,  1001,  1310,  1004,  1313,
+    1002,  1038,  1376,  1005,  1379,  1006,  1007,   341,  1017,  1226,
+     341,  1229,  1033,  1232,  1037,  1039,  1044,  1064,  1045,  1046,
+    1239,  1390,  1241,  1225,  1063,  1228,  1040,  1231,  1066,   308,
+    -258,  -258,  -258,  1069,  1070,   340,  1071,  1072,  1075,  1242,
+    1078,  1079,  1080,  1083,   604,  1085,  1150,  1086,  1087,  1088,
+    1091,  1251,  1252,  1096,  1350,  1097,  1099,  1118,  1255,   313,
+    1100,  1109,    87,   295,  1256,  1140,  1112,  1259,    91,    92,
+      93,  1115,  1122,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,  1059,  1125,  1128,  1141,  1142,   535,
+    1143,  1153,  1144,  1154,  1157,  1296,  1156,  1312,  1300,  1158,
+    1159,  1304,  1165,   341,  1166,  1307,  1167,  1168,  1169,   340,
+    1170,   340,  1171,  1172,  1173,  1175,  1176,  1185,  1178,  1180,
+    1316,  1182,  1184,  1318,  1187,   866,   867,  1193,   869,  1195,
+     872,   873,  1200,  1188,   876,   877,  1211,  1215,  -258,  -258,
+    -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,
+    -258,  -258,  1216,  1217,  1213,  1218,   328,   341,  1219,   121,
+    1220,  1250,   124,   125,   126,  1254,   340,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,  1270,   393,   394,  1246,   328,  1271,   133,  1279,  1247,
+    1248,  1280,   395,  1249,   924,   925,   926,   139,  1258,   191,
+    1281,  1282,  1274,  1283,  1291,  1294,   977,  1297,    87,   335,
+    1298,  1306,  1301,  1302,    91,    92,    93,  1305,  1311,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+    1319,   341,  1320,   341,  1326,  1322,  1324,  1334,  1335,  1340,
+    1343,   336,  1346,  1349,  1351,  1355,  1356,  1358,  1369,  1371,
+    1360,  1373,  1362,  1367,  1375,   986,  1377,  1386,  1387,  1388,
+    1389,   992,  1391,  1284,    35,    36,    37,    38,    39,   998,
+     999,  1000,    73,    43,   985,  1003,    46,    81,  1292,   511,
+    1008,  1009,  1010,   563,  1011,  1065,     0,     0,   341,     0,
+       0,     0,     0,     0,  1025,     0,     0,     0,     0,     0,
+    1032,     0,     0,  1035,     0,   121,     0,     0,   124,   125,
+     126,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  1047,  1048,  1049,  1050,   527,     0,   393,  1123,
+       0,     0,     0,   133,     0,     0,     0,     0,   395,     0,
+       0,     0,     0,   139,     0,   191,   552,  1060,     0,     0,
+       0,   930,     0,    87,   335,     0,     0,     0,     0,    91,
+      92,    93,     0,     0,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,     0,     0,     0,   688,     0,
+       0,  1092,  1093,  1094,  1095,     0,   336,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,     0,     0,     0,     0,   328,     0,     0,     0,    35,
+      36,    37,    38,    39,     0,     0,     0,  1131,    43,     0,
+       0,    46,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1149,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
+     121,     0,   328,   124,   125,   126,     0,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   736,   749,  1171,   686,   328,  1347,   747,   762,   341,
-     766,   767,   341,   785,   796,   793,   794,   795,   804,  1183,
-     805,   534,   806,   807,   808,   817,   815,   819,   833,   816,
-    1190,   834,  1191,   835,   840,   340,  1370,   841,  1373,   843,
-     844,   847,   853,   861,  1200,   864,   870,   871,   877,  1204,
-     878,   879,   880,   883,  1304,  1384,  1307,   884,   885,   886,
-     887,   888,  1220,   889,  1223,   890,  1226,   891,   892,   893,
-     894,   902,   903,  1233,   904,  1235,   909,  1219,   910,  1222,
-     911,  1225,   912,   308,   914,   862,   863,   915,   865,   340,
-     868,   869,   916,  1236,   872,   873,   918,   919,   917,   923,
-     535,   928,   929,   936,   931,  1245,  1246,   932,   933,   934,
-     935,  1344,  1249,   937,   341,   943,   961,   938,  1250,   971,
-     978,  1253,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,   953,   960,   979,   955,
-     328,   983,   986,   987,   990,   991,   993,   984,  1054,   985,
-     989,   997,   920,   921,   922,   998,  1012,  1000,   842,  1290,
-    1306,  1001,  1294,  1002,  1003,  1298,  1033,  1034,   341,  1301,
-    1028,  1035,  1039,   340,  1032,   340,  1040,  1041,  1058,  1059,
-    1061,  1083,  1064,  1065,  1310,  1066,  1067,  1312,  1070,    87,
-     335,  1073,  1160,  1074,  1075,    91,    92,    93,  1078,  1080,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   876,  1081,   982,  1082,  1086,  1091,  1092,  1094,   988,
-     340,  1103,   336,  1106,  1109,  1116,  1112,   994,   995,   996,
-    1119,  1122,  1134,   999,  1144,   913,  1147,  1148,  1004,  1005,
-    1006,  1135,   341,  1150,   341,    35,    36,    37,    38,    39,
-    1136,  1137,  1020,  1138,    43,  1151,  1152,    46,  1027,  1153,
-    1159,  1030,  1161,  1162,  1163,  1164,   314,   315,   316,   317,
+     327,     0,     0,   131,   337,   328,     0,   931,   133,   846,
+       0,     0,     0,   136,     0,     0,     0,     0,   139,     0,
+       0,   552,     0,     0,     0,  1186,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-    1042,  1043,  1044,  1045,   328,  1165,   121,  1167,  1166,   124,
-     125,   126,  1169,  1170,  1179,  1187,  1172,  1181,  1174,   341,
-    1194,  1189,  1176,  1178,  1182,  1055,  1205,  1209,  1207,   393,
-    1117,  1210,  1211,  1212,   133,  1213,  1248,  1264,  1214,   395,
-    1265,  1244,   962,  1240,   139,  1241,   191,   552,  1273,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,  1242,  1243,  1252,  1268,   328,  1274,  1087,
-    1088,  1089,  1090,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,  1275,  1276,  1277,
-    1285,   328,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,  1125,  1288,  1291,  1292,   328,  1295,
-    1296,  1299,  1149,  1300,  1305,  1313,    87,   335,  1314,  1278,
-    1143,  1316,    91,    92,    93,  1320,  1328,    94,    95,    96,
+       0,     0,     0,     0,   328,     0,    87,   335,  1201,  1202,
+    1203,  1204,    91,    92,    93,     0,     0,    94,    95,    96,
       97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,  1318,  1334,
-    1329,  1337,  1340,  1343,  1345,  1349,  1350,  1352,  1363,   336,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,  1354,  1365,  1367,  1369,   328,  1371,
-    1380,  1180,    35,    36,    37,    38,    39,  1356,  1361,  1381,
-    1382,    43,  1168,  1383,    46,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,  1195,  1196,  1197,  1198,   328,  1385,
-     973,   981,    73,    81,  1286,  1060,     0,   563,     0,     0,
-       0,     0,     0,   121,     0,     0,   124,   125,   126,     0,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,     0,     0,   131,   337,   328,     0,
-    1230,   133,     0,     0,     0,     0,   136,     0,     0,     0,
-       0,   139,     0,     0,   552,    87,    88,    89,     0,    90,
-       0,    91,    92,    93,     0,     0,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,  1263,   115,   116,
-     117,   118,     0,     0,   119,     0,     0,     7,     8,     0,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
+     107,   108,   109,   110,   111,   112,   113,   114,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   336,
+       0,     0,     0,     0,  1236,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   506,    15,    16,   507,    18,    19,   508,    21,   509,
-      23,     0,    24,     0,    26,    27,     0,    29,    30,    31,
-       0,     0,     0,    34,     0,     0,   120,     0,     0,     0,
-       0,     0,   121,   122,   123,   124,   125,   126,     0,     0,
-       0,     0,   127,   128,   129,   130,    50,    51,    52,     0,
-       0,     0,     0,     0,     0,   131,   132,     0,     0,     0,
-     133,     0,   134,   135,     0,   136,     0,   137,     0,   138,
-     139,     0,   140,    87,   335,   363,     0,     0,     0,    91,
-      92,    93,     0,     0,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,     0,   617,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   336,     0,     7,     8,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,   327,     0,     0,     0,     0,   328,    35,
-      36,    37,    38,    39,  1193,  1099,     0,  1100,    43,     0,
-       0,    46,   506,    15,    16,   507,    18,    19,   508,    21,
-     509,    23,     0,    24,     0,    26,    27,     0,    29,    30,
-      31,     0,     0,     0,    34,     0,     0,     0,     0,     0,
-     121,     0,     0,   124,   125,   126,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    50,    51,    52,
-       0,     0,     0,   131,   354,     0,     0,     0,   133,     0,
-       0,     0,     0,   136,     0,    87,   335,  1025,   139,     0,
-     355,    91,    92,    93,     0,     0,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   778,   336,     0,
-       7,     8,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,    35,    36,    37,    38,    39,  1272,     0,     0,     0,
-      43,     0,     0,    46,   506,    15,    16,   507,    18,    19,
+       0,     0,    35,    36,    37,    38,    39,   880,     0,     0,
+       0,    43,     0,     0,    46,     0,     0,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,  1269,     0,     0,     0,   328,     0,     0,     0,     0,
+       0,     0,     0,   121,     0,     0,   124,   125,   126,     0,
+       0,     0,     0,     0,     0,     0,     0,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   573,   574,   325,   326,
+     327,   133,     0,     0,     0,   328,   136,     0,    87,    88,
+      89,   139,    90,   355,    91,    92,    93,     0,     0,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+       0,   115,   116,   117,   118,     0,     0,   119,     0,     0,
+       7,     8,     0,     0,     0,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
+       0,     0,     0,   328,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   506,    15,    16,   507,    18,    19,
      508,    21,   509,    23,     0,    24,     0,    26,    27,     0,
-      29,    30,    31,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,   121,     0,     0,   124,   125,   126,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    50,
-      51,    52,     0,     0,     0,   131,   354,     0,     0,     0,
-     133,     0,     0,     0,     0,   136,     0,    87,   335,     0,
-     139,     0,  1026,    91,    92,    93,     0,     0,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   798,
-     336,     0,     7,     8,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,    35,    36,    37,    38,    39,  1321,     0,
-       0,     0,    43,     0,     0,    46,   506,    15,    16,   507,
-      18,    19,   508,    21,   509,    23,     0,    24,     0,    26,
-      27,     0,    29,    30,    31,     0,     0,     0,    34,     0,
-       0,     0,     0,     0,   121,     0,     0,   124,   125,   126,
+      29,    30,    31,     0,     0,     0,    34,     0,     0,   120,
+       0,     0,     0,     0,     0,   121,   122,   123,   124,   125,
+     126,     0,     0,     0,     0,   127,   128,   129,   130,    50,
+      51,    52,     0,     0,     0,     0,     0,     0,   131,   132,
+       0,     0,     0,   133,     0,   134,   135,     0,   136,     0,
+     137,     0,   138,   139,     0,   140,    87,   335,   363,     0,
+       0,     0,    91,    92,    93,     0,     0,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,     0,   618,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   336,
+       0,     7,     8,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
+       0,   328,    35,    36,    37,    38,    39,   917,  1105,     0,
+    1106,    43,     0,     0,    46,   506,    15,    16,   507,    18,
+      19,   508,    21,   509,    23,     0,    24,     0,    26,    27,
+       0,    29,    30,    31,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,   121,     0,     0,   124,   125,   126,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    50,    51,    52,     0,     0,     0,   131,   354,     0,
-       0,     0,   133,     0,     0,     0,     0,   136,     0,    87,
-     335,     0,   139,     0,   355,    91,    92,    93,     0,     0,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1266,   336,     0,     7,     8,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,    35,    36,    37,    38,    39,
-     536,     0,     0,     0,    43,     0,     0,    46,   506,    15,
-      16,   507,    18,    19,   508,    21,   509,    23,     0,    24,
-       0,    26,    27,     0,    29,    30,    31,     0,     0,     0,
-      34,     0,     0,     0,   536,     0,   121,     0,     0,   124,
-     125,   126,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    50,    51,    52,     0,     0,     0,   131,
-     337,     0,     0,     0,   133,     0,     0,     0,     0,   136,
-     613,    87,   335,     0,   139,     0,   551,    91,    92,    93,
-       0,     0,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1323,   336,     0,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   537,   326,   327,
-       0,     0,     0,     0,   328,     0,     0,    35,    36,    37,
-      38,    39,   710,     0,     0,     0,    43,     0,     0,    46,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   554,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,     0,   860,     0,   121,     0,
-       0,   124,   125,   126,     0,     0,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,   131,   337,     0,   328,     0,   133,     0,     0,     0,
-       0,   136,   925,    87,   335,     0,   139,     0,   739,    91,
-      92,    93,     0,     0,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   336,     0,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,     0,     0,     0,   328,     0,     0,    35,
-      36,    37,    38,    39,     0,     0,     0,     0,    43,     0,
-       0,    46,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     121,     0,     0,   124,   125,   126,     0,     0,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,   131,   354,     0,   328,     0,   133,     0,
-       0,     0,     0,   136,     0,    87,   295,   243,   139,     0,
-    1029,    91,    92,    93,     0,     0,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,     0,   115,   116,
-     117,   118,     0,     0,   119,     0,     0,     0,     0,     0,
-       0,     0,    87,   335,     0,     0,     0,     0,    91,    92,
+      50,    51,    52,     0,     0,     0,   131,   354,     0,     0,
+       0,   133,     0,     0,     0,     0,   136,     0,    87,   335,
+    1030,   139,     0,   355,    91,    92,    93,     0,     0,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     619,   336,     0,     7,     8,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
+       0,     0,     0,   328,    35,    36,    37,    38,    39,   966,
+       0,     0,     0,    43,     0,     0,    46,   506,    15,    16,
+     507,    18,    19,   508,    21,   509,    23,     0,    24,     0,
+      26,    27,     0,    29,    30,    31,     0,     0,     0,    34,
+       0,     0,     0,     0,     0,   121,     0,     0,   124,   125,
+     126,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    50,    51,    52,     0,     0,     0,   131,   354,
+       0,     0,     0,   133,     0,     0,     0,     0,   136,     0,
+      87,   335,     0,   139,     0,  1031,    91,    92,    93,     0,
+       0,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   782,   336,     0,     7,     8,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,     0,     0,     0,     0,   328,    35,    36,    37,    38,
+      39,  1155,     0,     0,     0,    43,     0,     0,    46,   506,
+      15,    16,   507,    18,    19,   508,    21,   509,    23,     0,
+      24,     0,    26,    27,     0,    29,    30,    31,     0,     0,
+       0,    34,     0,     0,     0,     0,     0,   121,     0,     0,
+     124,   125,   126,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    50,    51,    52,     0,     0,     0,
+     131,   354,     0,     0,     0,   133,     0,     0,     0,     0,
+     136,     0,    87,   335,     0,   139,     0,   355,    91,    92,
       93,     0,     0,    94,    95,    96,    97,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
      111,   112,   113,   114,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   336,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   881,     0,
-       0,     0,   121,   122,   123,   124,   125,   126,    35,    36,
-      37,    38,    39,     0,     0,     0,     0,    43,     0,     0,
-      46,     0,     0,     0,     0,   131,   132,     0,     0,     0,
-     133,     0,     0,     0,     0,   136,     0,     0,     0,     0,
-     139,     0,  1131,     0,     0,     0,     0,     0,     0,   121,
-       0,     0,   124,   125,   126,     0,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,   393,  1117,   328,     0,     0,   133,     0,     0,
-       0,     0,   395,     0,    87,   295,     0,   139,     0,   191,
+       0,     0,     0,     0,   802,   336,     0,     7,     8,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,     0,     0,     0,     0,   328,    35,    36,
+      37,    38,    39,  1174,     0,     0,     0,    43,     0,     0,
+      46,   506,    15,    16,   507,    18,    19,   508,    21,   509,
+      23,     0,    24,     0,    26,    27,     0,    29,    30,    31,
+       0,     0,     0,    34,     0,     0,     0,     0,     0,   121,
+       0,     0,   124,   125,   126,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    50,    51,    52,     0,
+       0,     0,   131,   337,     0,     0,     0,   133,     0,     0,
+       0,     0,   136,     0,    87,   335,     0,   139,     0,   551,
       91,    92,    93,     0,     0,    94,    95,    96,    97,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
      109,   110,   111,   112,   113,   114,     0,     0,     0,     0,
-       0,     7,     8,    87,   295,     0,     0,     0,     0,    91,
-      92,    93,     0,     0,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   506,    15,    16,   507,    18,
-      19,   508,    21,   509,    23,     0,    24,     0,    26,    27,
-       0,    29,    30,    31,     0,     0,     0,    34,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1272,   336,     0,     7,
+       8,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
+      35,    36,    37,    38,    39,  1199,     0,     0,     0,    43,
+       0,     0,    46,   506,    15,    16,   507,    18,    19,   508,
+      21,   509,    23,     0,    24,     0,    26,    27,     0,    29,
+      30,    31,     0,     0,     0,    34,     0,  1278,     0,     0,
        0,   121,     0,     0,   124,   125,   126,     0,     0,     0,
-      50,    51,    52,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   131,   132,     0,     0,     0,   133,
-       0,     0,     0,     0,   136,     0,     0,   300,     0,   139,
-     121,   301,     0,   124,   125,   126,     0,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,   131,   132,   328,     0,     0,   133,     0,
-       0,     0,  1126,   136,  1127,     0,   717,     0,   139,     0,
-     718,    87,   295,     0,     0,     0,     0,    91,    92,    93,
-       0,     0,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,     0,    87,   335,
-       0,   328,     0,   494,    91,    92,    93,     0,   577,    94,
+       0,     0,     0,     0,     0,     0,     0,     0,    50,    51,
+      52,     0,     0,     0,   131,   337,     0,     0,     0,   133,
+       0,     0,  1327,     0,   136,     0,    87,   335,     0,   139,
+       0,   741,    91,    92,    93,     0,     0,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1329,   336,
+       0,     0,     0,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
+       0,   328,    35,    36,    37,    38,    39,     0,     0,     0,
+       0,    43,     0,     0,    46,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
+       0,     0,     0,   328,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   121,     0,     0,   124,   125,   126,     0,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,     0,     0,   131,   354,   328,     0,
+       0,   133,     0,     0,     0,     0,   136,     0,    87,   295,
+     243,   139,     0,  1034,    91,    92,    93,     0,     0,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+       0,   115,   116,   117,   118,     0,     0,   119,     0,     0,
+       0,     0,     0,   536,     0,    87,   335,     0,     0,     0,
+       0,    91,    92,    93,     0,     0,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   336,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   336,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,     0,     0,   121,     0,
-     328,   124,   125,   126,    35,    36,    37,    38,    39,   742,
-       0,     0,     0,    43,     0,     0,    46,     0,     0,     0,
-       0,   393,   394,     0,     0,     0,   133,     0,     0,     0,
-       0,   395,     0,     0,     0,     0,   139,     0,   191,     0,
-       0,     0,     0,     0,     0,   121,     0,     0,   124,   125,
-     126,     0,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,     0,     0,   131,   337,
-     328,     0,     0,   133,    87,   295,   243,  1217,   136,  1218,
-      91,    92,    93,   139,     0,    94,    95,    96,    97,    98,
+       0,     0,     0,     0,     0,   121,   122,   123,   124,   125,
+     126,    35,    36,    37,    38,    39,     0,     0,     0,     0,
+      43,     0,     0,    46,     0,     0,     0,     0,   131,   132,
+       0,     0,     0,   133,     0,     0,     0,     0,   136,     0,
+       0,     0,   536,   139,     0,  1137,     0,     0,     0,     0,
+       0,     0,   121,     0,     0,   124,   125,   126,     0,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     537,   326,   327,     0,     0,   393,  1123,   328,     0,     0,
+     133,     0,     0,     0,     0,   395,   615,    87,   295,     0,
+     139,     0,   191,    91,    92,    93,     0,     0,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   885,
+       0,     0,     0,     0,   712,     0,    87,   295,     0,     0,
+       0,     0,    91,    92,    93,     0,     0,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   554,
+     326,   327,     0,     0,     0,     0,   328,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,     0,     0,     0,   121,   328,     0,   124,   125,   126,
+       0,     0,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,     0,   131,   132,     0,
+     328,     0,   133,     0,     0,     0,     0,   136,     0,     0,
+     300,     0,   139,   121,   301,     0,   124,   125,   126,     0,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,     0,     0,   131,   132,   328,     0,
+       0,   133,     0,     0,     0,     0,   136,     0,     0,   719,
+       0,   139,   864,   720,    87,   335,     0,     0,     0,     0,
+      91,    92,    93,     0,     0,    94,    95,    96,    97,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,     0,   115,   116,   117,
-     118,    87,   295,   119,     0,     0,     0,    91,    92,    93,
-       0,     0,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,     0,     0,     0,     0,     0,     0,     0,
-     781,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   121,   122,   123,   124,   125,   126,     0,   314,   315,
+     109,   110,   111,   112,   113,   114,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   336,     0,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
+      35,    36,    37,    38,    39,   929,   744,    87,   295,    43,
+       0,     0,    46,    91,    92,    93,     0,     0,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,     0,
+       0,   121,     0,     0,   124,   125,   126,     0,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,     0,   131,   132,   328,     0,     0,   133,
-       0,     0,     0,     0,   136,   813,     0,     0,   121,   139,
-       0,   124,   125,   126,    -4,     1,     0,     0,    -4,     0,
-       0,     0,     0,     0,     0,     0,    -4,    -4,     0,     0,
-       0,   131,   132,     0,     0,     0,   133,     0,     0,     0,
-       0,   136,     0,     0,     0,     0,   139,     0,     0,    -4,
-       0,     0,     0,     0,    -4,    -4,     0,    -4,    -4,     0,
-      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
-       0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
-       0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,
-      -4,    -4,    -4,    -4,    -4,    -4,     0,     0,    -4,    -4,
-       0,     0,     0,     0,    -4,    -4,    -4,    -4,     0,     0,
-      -4,     0,    -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,
-      -4,    -4,    -4,    -4,     0,     0,     6,     0,     0,     0,
-      -4,    -4,    -4,    -4,     7,     8,     0,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,     9,     0,     0,
-       0,     0,    10,    11,   859,    12,    13,     0,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,     0,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,     0,    33,
-      34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
-      43,    44,    45,    46,     0,     0,    47,    48,     0,     0,
-       0,     0,    49,    50,    51,    52,     0,     0,    53,     0,
-      54,     0,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,     0,     0,     0,     0,     0,     0,    65,    66,
-      67,    68,   314,   315,   316,   317,   318,   319,   320,   321,
+     326,   327,     0,     0,   131,   337,   328,     0,     0,   133,
+      87,   295,   243,     0,   136,     0,    91,    92,    93,   139,
+       0,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,     0,   115,   116,   117,   118,     0,     0,   119,
+       0,     0,     0,     0,   121,     0,     0,   124,   125,   126,
+       0,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,     0,     0,   131,   132,   328,
+       0,     0,   133,     0,     0,     0,     0,   136,     0,     0,
+       0,     0,   139,     0,     0,     0,     0,     0,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,     0,     0,     0,     0,   328,   121,   122,   123,
+     124,   125,   126,    -4,     1,   785,     0,    -4,     0,     0,
+       0,     0,     0,     0,     0,    -4,    -4,     0,     0,     0,
+     131,   132,     0,     0,     0,   133,     0,     0,     0,     0,
+     136,     0,     0,     0,     0,   139,     0,     0,    -4,     0,
+       0,     0,     0,    -4,    -4,     0,    -4,    -4,     0,    -4,
+      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,
+      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,
+      -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,     0,    -4,
+      -4,    -4,    -4,    -4,    -4,     0,     0,    -4,    -4,     0,
+       0,     0,     0,    -4,    -4,    -4,    -4,     0,     0,    -4,
+       0,    -4,     0,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+      -4,    -4,    -4,     0,     0,     6,     0,     0,     0,    -4,
+      -4,    -4,    -4,     7,     8,     0,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+       0,     0,     0,     0,   328,     0,     9,     0,     0,     0,
+       0,    10,    11,   817,    12,    13,     0,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,     0,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,     0,    33,    34,
+      35,    36,    37,    38,    39,    40,     0,    41,    42,    43,
+      44,    45,    46,     0,     0,    47,    48,     7,     8,     0,
+       0,    49,    50,    51,    52,     0,     0,    53,     0,    54,
+       0,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,     0,     0,     0,     0,     0,     0,    65,    66,    67,
+      68,   506,    15,    16,   507,    18,    19,   508,    21,   509,
+      23,     0,    24,     0,    26,    27,     0,    29,    30,    31,
+       0,     0,     0,    34,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
+       0,     0,   328,     0,     0,     0,    50,    51,    52,  1132,
+       0,  1133,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,     0,     0,   898,
+     328,     0,     0,     0,     0,     0,     0,  1223,     0,  1224,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,     0,     0,  1097,   314,   315,
+       0,     0,     0,     0,     0,     0,     0,   863,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,     0,     0,  1114,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,   902,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
-       0,     0,     0,  1155,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,  1103,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
        0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
-       0,  1156,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,  1120,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,     0,     0,  1157,
+     328,     0,     0,     0,     0,     0,     0,     0,     0,  1161,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,     0,     0,  1158,   314,   315,
+       0,     0,     0,     0,     0,     0,     0,  1162,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,     0,     0,  1188,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,  1163,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
-       0,     0,     0,  1232,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,  1164,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
        0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
-       0,  1237,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,  1194,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
      328,     0,     0,     0,     0,     0,     0,     0,     0,  1238,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,     0,     0,  1254,   314,   315,
+       0,     0,     0,     0,     0,     0,     0,  1243,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,     0,     0,  1257,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,  1244,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
        0,     0,     0,  1260,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
        0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
-       0,  1284,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,  1263,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,     0,     0,  1287,
+     328,     0,     0,     0,     0,     0,     0,     0,     0,  1266,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,     0,     0,  1315,   314,   315,
+       0,     0,     0,     0,     0,     0,     0,  1290,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,     0,     0,  1317,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,  1293,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
-       0,     0,     0,  1319,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,  1321,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
        0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
-       0,  1332,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,  1323,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,   530,   314,   315,
+     328,     0,     0,     0,     0,     0,     0,     0,     0,  1325,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
+       0,     0,     0,     0,     0,     0,     0,  1338,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,   577,   314,   315,   316,   317,   318,   319,
+     326,   327,     0,     0,     0,     0,   328,     0,   494,     0,
+       0,     0,     0,   579,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,     0,     0,     0,   578,
+       0,     0,   328,     0,     0,     0,     0,     0,     0,   530,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,   610,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,   579,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
-       0,   661,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   580,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,   662,   314,   315,
+     328,     0,     0,     0,     0,     0,     0,   612,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,   675,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,   663,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,     0,     0,     0,   676,
+       0,     0,   328,     0,     0,     0,     0,     0,     0,   664,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
        0,     0,     0,     0,     0,   677,   314,   315,   316,   317,
@@ -2008,596 +2029,617 @@ static const yytype_int16 yytable[] =
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
        0,     0,     0,   680,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,     0,     0,     0,   769,
+       0,     0,   328,     0,     0,     0,     0,     0,     0,   681,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,   770,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,   682,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
-       0,   771,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   773,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,   856,   314,   315,
+     328,     0,     0,     0,     0,     0,     0,   774,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,   896,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,   775,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,     0,     0,     0,   897,
+       0,     0,   328,     0,     0,     0,     0,     0,     0,   860,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,   924,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,   900,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
-       0,  1049,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   901,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,  1050,   314,   315,
+     328,     0,     0,     0,     0,     0,     0,   928,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,  1069,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,  1054,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,     0,     0,     0,  1201,
+       0,     0,   328,     0,     0,     0,     0,     0,     0,  1055,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,     0,     0,     0,  1202,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,  1074,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,     0,     0,     0,     0,
-       0,  1208,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,  1207,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,     0,     0,     0,  1280,   314,   315,
+     328,     0,     0,     0,     0,     0,     0,  1208,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-       0,     0,     0,  1283,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,  1214,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,   498,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,     0,     0,   615,
+       0,     0,   328,     0,     0,     0,     0,     0,     0,  1286,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,   625,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,     0,     0,   640,   314,   315,   316,   317,
+       0,     0,     0,     0,     0,  1289,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,     0,     0,     0,   642,   314,
+       0,     0,     0,     0,   328,     0,     0,     0,   498,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
-       0,   644,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   617,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,   646,   314,   315,   316,   317,   318,
+     328,     0,     0,     0,   627,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
-       0,     0,     0,   328,     0,     0,     0,   648,   314,   315,
+       0,     0,     0,   328,     0,     0,     0,   642,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-     650,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     644,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,     0,     0,   652,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,   646,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,   654,   314,   315,   316,
+       0,     0,   328,     0,     0,     0,   648,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,     0,     0,   656,
+     327,     0,     0,     0,     0,   328,     0,     0,     0,   650,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,   658,   314,   315,   316,   317,   318,   319,   320,
+       0,     0,   652,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,     0,     0,   660,   314,   315,   316,   317,
+       0,   328,     0,     0,     0,   654,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,     0,     0,     0,   664,   314,
+       0,     0,     0,     0,   328,     0,     0,     0,   656,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
-       0,   666,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   658,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,   668,   314,   315,   316,   317,   318,
+     328,     0,     0,     0,   660,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
-       0,     0,     0,   328,     0,     0,     0,   670,   314,   315,
+       0,     0,     0,   328,     0,     0,     0,   662,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-     672,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     666,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,     0,     0,   674,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,   668,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,   788,   314,   315,   316,
+       0,     0,   328,     0,     0,     0,   670,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,     0,     0,   789,
+     327,     0,     0,     0,     0,   328,     0,     0,     0,   672,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-       0,     0,   791,   314,   315,   316,   317,   318,   319,   320,
+       0,     0,   674,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,     0,     0,   792,   314,   315,   316,   317,
+       0,   328,     0,     0,     0,   676,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,     0,     0,     0,   809,   314,
+       0,     0,     0,     0,   328,     0,     0,     0,   792,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
-       0,   832,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   793,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,     0,     0,   930,   314,   315,   316,   317,   318,
+     328,     0,     0,     0,   795,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
-       0,     0,     0,   328,     0,     0,     0,   945,   314,   315,
+       0,     0,     0,   328,     0,     0,     0,   796,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,     0,     0,
-     947,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     813,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,     0,     0,   949,   314,   315,   316,   317,   318,   319,
+       0,     0,     0,   836,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,     0,     0,   951,   314,   315,   316,
+       0,     0,   328,     0,     0,     0,   934,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,     0,     0,  1062,
+     327,     0,     0,     0,     0,   328,     0,     0,     0,   949,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-     494,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,   531,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,     0,   951,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
+       0,   328,     0,     0,     0,   953,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+       0,     0,     0,     0,   328,     0,     0,     0,   955,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,     0,     0,     0,     0,   328,     0,     0,
+       0,  1067,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,   540,   314,   315,   316,   317,   318,   319,   320,
+     328,     0,   494,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,   541,   314,   315,   316,   317,   318,   319,
+       0,   328,     0,   531,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,   543,   314,   315,   316,   317,   318,
+       0,     0,   328,     0,   540,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
-       0,     0,     0,   328,     0,   545,   314,   315,   316,   317,
+       0,     0,     0,   328,     0,   541,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,     0,   546,   314,   315,   316,
+       0,     0,     0,     0,   328,     0,   543,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,   549,   314,   315,
+     327,     0,     0,     0,     0,   328,     0,   545,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,     0,     0,     0,   328,     0,   550,   314,
+     326,   327,     0,     0,     0,     0,   328,     0,   546,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,     0,     0,     0,     0,   328,     0,   606,
+     325,   326,   327,     0,     0,     0,     0,   328,     0,   549,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-     607,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     550,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
        0,   608,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,   614,   314,   315,   316,   317,   318,   319,   320,
+     328,     0,   609,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,   639,   314,   315,   316,   317,   318,   319,
+       0,   328,     0,   610,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,   641,   314,   315,   316,   317,   318,
+       0,     0,   328,     0,   616,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
-       0,     0,     0,   328,     0,   643,   314,   315,   316,   317,
+       0,     0,     0,   328,     0,   641,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,     0,   645,   314,   315,   316,
+       0,     0,     0,     0,   328,     0,   643,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,   647,   314,   315,
+     327,     0,     0,     0,     0,   328,     0,   645,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,     0,     0,     0,   328,     0,   649,   314,
+     326,   327,     0,     0,     0,     0,   328,     0,   647,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,     0,     0,     0,     0,   328,     0,   651,
+     325,   326,   327,     0,     0,     0,     0,   328,     0,   649,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-     653,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     651,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,   655,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   653,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,   657,   314,   315,   316,   317,   318,   319,   320,
+     328,     0,   655,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,   659,   314,   315,   316,   317,   318,   319,
+       0,   328,     0,   657,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,   663,   314,   315,   316,   317,   318,
+       0,     0,   328,     0,   659,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
-       0,     0,     0,   328,     0,   665,   314,   315,   316,   317,
+       0,     0,     0,   328,     0,   661,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,     0,   667,   314,   315,   316,
+       0,     0,     0,     0,   328,     0,   665,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,   669,   314,   315,
+     327,     0,     0,     0,     0,   328,     0,   667,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,     0,     0,     0,   328,     0,   671,   314,
+     326,   327,     0,     0,     0,     0,   328,     0,   669,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,     0,     0,     0,     0,   328,     0,   673,
+     325,   326,   327,     0,     0,     0,     0,   328,     0,   671,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-     728,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     673,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,   733,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   675,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,   741,   314,   315,   316,   317,   318,   319,   320,
+     328,     0,   730,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,   743,   314,   315,   316,   317,   318,   319,
+       0,   328,     0,   735,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,   744,   314,   315,   316,   317,   318,
+       0,     0,   328,     0,   743,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
-       0,     0,     0,   328,     0,   750,   314,   315,   316,   317,
+       0,     0,     0,   328,     0,   745,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-       0,     0,     0,     0,   328,     0,   757,   314,   315,   316,
+       0,     0,     0,     0,   328,     0,   746,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,   758,   314,   315,
+     327,     0,     0,     0,     0,   328,     0,   752,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
      326,   327,     0,     0,     0,     0,   328,     0,   759,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,     0,     0,     0,     0,   328,     0,   780,
+     325,   326,   327,     0,     0,     0,     0,   328,     0,   760,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-     782,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     761,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,   783,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,   784,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,   787,   314,   315,   316,   317,   318,   319,   320,
+     328,     0,   786,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328,     0,   944,   314,   315,   316,   317,   318,   319,
+       0,   328,     0,   787,   314,   315,   316,   317,   318,   319,
      320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
-       0,     0,   328,     0,   946,   314,   315,   316,   317,   318,
+       0,     0,   328,     0,   791,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
        0,     0,     0,   328,     0,   948,   314,   315,   316,   317,
      318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
        0,     0,     0,     0,   328,     0,   950,   314,   315,   316,
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,     0,     0,     0,     0,   328,     0,   954,   314,   315,
+     327,     0,     0,     0,     0,   328,     0,   952,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,     0,     0,     0,     0,   328,     0,  1098,   314,
+     326,   327,     0,     0,     0,     0,   328,     0,   954,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,     0,     0,     0,     0,   328,     0,  1113,
+     325,   326,   327,     0,     0,     0,     0,   328,     0,   958,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,     0,     0,     0,     0,   328,     0,
-    1130,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+    1104,   314,   315,   316,   317,   318,   319,   320,   321,   322,
      323,   324,   325,   326,   327,     0,     0,     0,     0,   328,
-       0,  1279,   314,   315,   316,   317,   318,   319,   320,   321,
+       0,  1119,   314,   315,   316,   317,   318,   319,   320,   321,
      322,   323,   324,   325,   326,   327,     0,     0,     0,     0,
-     328,     0,  1330,   314,   315,   316,   317,   318,   319,   320,
+     328,     0,  1136,   314,   315,   316,   317,   318,   319,   320,
      321,   322,   323,   324,   325,   326,   327,     0,     0,     0,
-       0,   328
+       0,   328,     0,  1285,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,     0,     0,
+       0,     0,   328,     0,  1336,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,     0,
+       0,     0,     0,   328
 };
 
 static const yytype_int16 yycheck[] =
 {
-       6,   234,   235,   236,   303,     4,     3,   199,     6,    75,
-       6,   387,   388,     6,     6,    36,    37,   209,    39,  1144,
-       5,   703,     4,     4,     6,     4,     4,     4,     4,   144,
-     155,     4,     4,     4,   149,   160,     5,     7,   230,   164,
-     232,  1166,     6,     6,   140,   141,    76,     0,     7,   173,
-     174,   147,    82,    83,   287,   288,   289,   290,     6,   292,
-     293,   294,   143,    75,    13,    76,    12,    13,     6,   150,
-     775,    82,    83,   143,    50,     7,     6,   143,   133,   134,
-     204,   133,   134,    59,   150,    76,   143,    86,    87,    88,
-      89,    82,    83,   150,   149,    52,   151,   149,    90,   151,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-     144,    57,     6,    59,    60,   149,    62,    63,    64,    96,
-      97,   151,    68,    96,    97,   131,   132,   133,     6,   143,
-     136,   137,   130,   104,   144,   141,   150,   130,   150,   149,
-     151,   147,   143,   140,   150,    91,    92,    93,   154,   155,
-     156,   157,   151,   159,   160,   161,   162,  1282,   164,   165,
-     166,   843,   143,   145,   123,   150,   187,   188,   140,   141,
-     779,   150,   150,   145,   195,   147,   301,   147,   199,   150,
-     152,   150,   133,   134,   190,   191,   150,   150,   120,   121,
-     122,   123,    56,   199,    46,   133,   134,    49,   149,   498,
-      52,    49,   144,   908,    52,   151,   398,   149,   140,   141,
-     216,   217,   218,     7,   220,   147,   144,   223,   224,    76,
-     226,   149,    75,   143,  1349,    82,    83,     7,   155,   421,
-      75,   143,   238,   160,   566,   567,   568,   164,   150,   245,
+       6,     4,   199,   387,   388,   303,     3,     5,  1150,     0,
+       4,     6,   209,     6,     4,     4,    36,    37,     5,    39,
+       4,   234,   235,   236,   705,     6,     4,   155,     4,     4,
+    1172,     6,   160,   230,     7,   232,   164,     6,     6,    75,
+     143,     6,     4,   143,     4,    76,     7,   150,    76,    75,
+     150,    82,    83,     6,    82,    83,     6,   783,    76,   779,
+      52,    76,   133,   134,    82,    83,   144,    82,    83,   173,
+     174,   149,    13,     7,   287,   288,   289,   290,   149,   292,
+     293,   294,     7,     4,     5,   144,   133,   134,    50,     7,
+     149,   144,    86,    87,    88,    89,   149,    59,   140,   141,
+     204,   104,   149,   145,   151,   147,    96,    97,   150,    90,
+     152,   143,    96,    97,   150,    36,    37,    38,    39,    49,
+     151,    42,    52,   151,   150,   131,   132,   133,   133,   134,
+     136,   137,     4,   151,     6,   141,   151,   130,   133,   134,
+     149,   147,   151,   140,   150,   150,  1288,   150,   154,   155,
+     156,   157,   150,   159,   160,   161,   162,   151,   164,   165,
+     166,   150,   123,   150,   140,   141,   847,   187,   188,   145,
+     145,   147,   150,   301,   147,   195,   152,   130,   184,   199,
+       6,   150,   150,   143,   190,   191,   120,   121,   122,   123,
+     111,   112,   912,   199,     5,   120,   121,   122,   123,     6,
+     498,   398,   120,   121,   122,   123,   140,   141,   140,   141,
+     216,   217,   218,  1355,   220,   140,   141,   223,   224,    75,
+     226,     6,   147,    76,   421,    36,    37,    38,    39,    82,
+      83,    42,   238,    49,   143,   143,    52,   145,    54,   245,
      246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
      256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
      266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
      276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   133,   134,   965,     4,   291,     6,   412,     6,     7,
-     143,   143,   143,   143,   151,   301,     8,   150,   150,   135,
-     136,   137,   143,   143,   145,   150,   142,   303,   314,   315,
+     286,   155,   140,   141,   412,   291,   160,   143,   969,   147,
+     164,   133,   134,   143,   150,   301,     7,    76,   151,    76,
+     111,   112,    75,    82,    83,    82,    83,   149,   314,   315,
      316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   143,   143,   145,   120,   121,   122,   123,
-      76,   337,     7,    52,   133,   134,    82,    83,    52,   345,
-     120,   121,   122,   123,   350,     4,     5,    52,   354,   355,
-     149,    54,   151,   359,   360,   361,   362,    52,   133,   134,
-     140,   141,   368,    49,   385,   386,   143,   373,   374,   375,
-      52,   143,   393,   145,   301,   150,   150,    36,    37,    38,
-      39,   133,   134,    42,   390,   391,   392,   393,   394,   395,
-     387,   388,   625,   399,   400,   401,   402,   150,   150,   405,
-     140,   141,   408,   409,   529,   151,   412,   413,   414,     4,
-     337,    49,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   551,   354,   355,    52,
-     142,   437,   133,   134,   440,    76,   143,    49,   145,   151,
-       4,    82,    83,   439,     4,   120,   121,   122,   123,   150,
-     683,     4,   111,   112,    76,   143,   689,   133,   134,    49,
-      82,    83,    52,    76,    54,   140,   141,     6,  1150,    82,
-      83,     4,     5,   149,    69,    70,    71,    72,   133,   134,
-     713,   140,   141,    78,   145,   412,    81,   493,   147,    76,
-     143,    76,   145,   143,   500,    82,    83,    82,    83,   133,
-     134,   143,   498,    36,    37,    38,    39,   499,   143,    42,
-     151,    76,   143,     4,   145,   149,  1221,    82,    83,  1224,
-     150,     4,  1227,   529,   530,   143,   532,   533,    76,   151,
-     536,   537,   538,    76,    82,    83,   835,   836,   151,    82,
-      83,   143,   133,   134,    76,   551,   143,   143,   554,   555,
-      82,    83,     4,     7,   560,   576,     6,   682,   149,   565,
-     566,   567,   568,   143,   151,  1174,   151,  1176,   589,  1178,
-     143,   577,   578,   565,   566,   567,   568,   583,   111,   112,
-     143,   706,   707,   708,   709,    49,   151,   143,    52,   595,
-      54,   597,     6,   718,   143,     5,   145,  1302,   143,   133,
-     134,     8,   529,   151,   610,   143,   612,   613,   151,   150,
-     537,   538,   618,   143,   739,   149,   167,     6,   143,   151,
-     145,   172,   173,   174,   551,   133,   134,   554,  1333,   625,
-     143,  1336,   183,   184,  1339,   186,  1012,  1342,   143,   143,
-       8,   149,   143,   143,   133,   134,   143,   133,   134,   133,
-     134,   133,   134,   204,   205,   661,   662,   143,  1267,  1364,
-     149,  1366,   143,  1368,   150,   149,   143,   149,   145,   675,
-     676,   677,   678,   679,   680,   143,   682,     6,   133,   134,
-     143,   687,   133,   134,   140,   141,   143,     4,   145,   145,
-     696,   147,   133,   134,   149,   716,   152,   143,   149,   145,
-     706,   707,   708,   709,   710,  1314,   150,  1316,   149,  1318,
-     150,   143,   718,   145,   143,  1324,   145,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   150,   143,   739,   145,   142,   133,   134,   133,   134,
-     973,   143,   143,  1352,   151,  1354,   145,  1356,   769,   770,
-     771,     6,   149,   143,   149,   682,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     133,   134,   133,   134,   142,   150,   144,   133,   134,   706,
-     707,   708,   709,    12,    13,   143,   149,   145,   149,   914,
-     143,   718,   145,   149,  1170,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   815,
-     816,   145,   739,   142,   149,     6,   151,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,   143,    57,   145,
-      59,    60,   145,    62,    63,    64,   832,   147,   844,    68,
-     836,   133,   134,   143,     6,   145,   140,   141,   150,    99,
-     856,   145,     6,   147,   860,     6,   150,   149,   152,   143,
-       6,   145,    91,    92,    93,   143,   143,   145,   145,   124,
+     326,   327,   328,     8,   143,     4,     5,   133,   134,    76,
+     143,   337,    56,   133,   134,    82,    83,   150,   303,   345,
+      76,     6,     7,   149,   350,   151,    82,    83,   354,   355,
+     150,     4,   143,   359,   360,   361,   362,    36,    37,    38,
+      39,   143,   368,    42,    52,   385,   386,   373,   374,   375,
+     143,   143,    46,   393,   151,    49,    52,   150,    52,    52,
+     133,   134,   133,   134,   390,   391,   392,   393,   394,   395,
+     387,   388,    52,   399,   400,   401,   402,   150,   149,   405,
+     151,   529,   408,   409,   151,    54,   412,   413,   414,   120,
+     121,   122,   123,   143,   627,   151,    69,    70,    71,    72,
+     133,   134,   143,   551,   145,    78,    49,   301,    81,   140,
+     141,   437,   111,   112,   440,   150,   149,   133,   134,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   149,   145,   151,   907,   142,     4,   895,
-     896,   897,     5,   149,   145,   151,   147,   903,   904,     6,
-     142,   907,   133,   134,   135,   136,   137,    46,   914,   150,
-      49,   142,   149,    52,   151,    54,     7,   147,   924,   925,
-     926,   145,   151,    36,    37,    38,    39,   150,   149,    42,
-     151,   149,   938,   151,    52,   151,    54,   943,   150,   149,
-     936,   151,     7,     7,   495,   496,   149,   149,   151,   151,
-       7,   149,   958,   151,   149,   149,   151,   151,   979,     6,
-     149,   149,   151,   151,   149,   957,   151,   149,   149,   151,
-     151,   149,   978,   151,   149,   149,   151,   151,   984,   985,
-     149,     7,   151,   989,   149,   143,   151,   914,   143,     7,
-    1182,   997,  1013,   149,  1015,   151,  1017,   144,   111,   112,
-     143,   149,  1008,   151,     6,  1026,  1131,  1028,  1029,   149,
-     561,   151,   149,   143,   151,  1012,  1008,   149,     7,   151,
-    1026,   572,   573,  1029,     7,   149,  1032,   151,   149,   149,
-     151,   151,     6,    96,  1040,   150,   144,   149,   144,   144,
-     144,   144,   144,  1049,  1050,   144,     6,     4,  1040,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-    1185,   149,   149,  1069,   142,   146,     7,    99,     7,     7,
-       7,    99,     7,     7,    99,     7,  1268,   124,   125,   126,
+     135,   136,   137,   149,  1180,   150,  1182,   142,  1184,   133,
+     134,   140,   141,   337,    76,   143,   151,   145,   147,   143,
+      82,    83,   685,    49,   439,  1156,   150,    76,   691,   143,
+     354,   355,    76,    82,    83,    49,   150,   493,    82,    83,
+      76,   133,   134,   144,   500,    52,    82,    83,   149,   133,
+     134,   143,   715,   133,   134,    52,    49,  1227,   150,    52,
+    1230,    54,   144,  1233,    76,   149,     4,   149,   499,   149,
+      82,    83,     4,   529,   530,     4,   532,   533,   133,   134,
+     536,   537,   538,   498,   143,   133,   134,   143,   412,   151,
+     143,   839,   840,   143,   149,   551,     6,  1273,   554,   555,
+     145,   149,   151,   143,   560,   145,   684,   151,   578,   565,
+     566,   567,   568,     4,   143,   151,   145,   573,   574,    46,
+       4,   591,    49,   579,   580,    52,   143,    54,   145,   585,
+     708,   709,   710,   711,   565,   566,   567,   568,  1308,   151,
+     143,   597,   720,   599,  1320,   143,  1322,   145,  1324,   133,
+     134,   133,   134,   143,  1330,   145,   612,   143,   614,   615,
+     133,   134,   143,   741,   620,   149,   143,   149,   145,  1339,
+     150,   143,  1342,   145,   143,  1345,   149,   143,  1348,   566,
+     567,   568,  1358,  1017,  1360,   143,  1362,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   143,
+    1370,     8,  1372,   142,  1374,   529,   143,   663,   664,   143,
+       7,   145,   627,   537,   538,   133,   134,   143,   133,   134,
+     143,   677,   678,   679,   680,   681,   682,   551,   684,   143,
+     554,   149,     4,   689,   149,   133,   134,   143,   143,   145,
+     145,     5,   698,   133,   134,   133,   134,   143,   718,   145,
+     574,   149,   708,   709,   710,   711,   712,   133,   134,   149,
+       6,   149,   133,   134,   720,   140,   141,   133,   134,   143,
+     145,   145,   147,   149,   167,   143,     6,   152,   149,   172,
+     173,   174,   135,   136,   137,   741,   143,   143,   145,   142,
+     183,   143,   150,   186,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   773,   774,   775,   143,   142,   145,   765,
+       6,   204,   205,   143,   977,   145,   143,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   143,   143,   145,   145,   142,   149,   143,   151,   145,
+     918,   149,  1176,   151,   151,   143,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   145,   143,   147,
+     684,   142,     4,   819,   820,   149,   143,   151,   133,   134,
+     135,   136,   137,     6,     6,     7,     8,   142,   149,   149,
+     151,   151,   143,   150,   708,   709,   710,   711,    52,   149,
+      54,   151,   848,   149,   143,   151,   720,   149,   149,   151,
+     151,   149,   143,   151,   860,   149,   143,   151,   864,   149,
+     149,   151,   151,   149,   149,   151,   151,   741,   149,   143,
+     151,   836,   149,     6,   151,   840,   149,   149,   151,   151,
+     149,   149,   151,   151,   149,   149,   151,   151,   149,   145,
+     151,   911,   150,   899,   900,   901,   149,   149,   151,   151,
+     150,   907,   908,   150,   149,   911,   151,   149,   149,   151,
+     151,   145,   918,   145,   147,   150,     6,     6,    99,     6,
+     145,     4,   928,   929,   930,     6,   150,   142,   147,     7,
+     150,     7,   145,   151,   377,     7,   942,     7,   150,   143,
+     143,   947,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   962,   143,   143,     7,
+     142,     6,     6,   983,   144,     7,     7,    96,   144,   144,
+     144,   150,   144,     6,   144,   940,   982,   144,   149,   144,
+     961,   149,   988,   989,     4,   149,   146,   993,     7,    99,
+       7,  1188,     7,     7,    99,  1001,     7,     7,  1018,    99,
+    1020,     7,  1022,     7,     4,     6,   147,  1013,     7,  1137,
+       6,  1031,   151,  1033,  1034,   151,     7,     7,     7,   147,
+    1017,     4,     7,     7,   143,  1031,     7,     7,  1034,   143,
+     150,  1037,  1013,     6,     6,     6,     6,   146,     6,  1045,
+       7,   145,     6,    52,   918,   130,     7,     7,  1054,  1055,
+       6,    54,   495,   496,     7,    12,    13,     7,     7,     7,
+       7,     7,   144,  1191,  1045,   144,     7,   144,  1074,   144,
+       7,     6,     4,     6,   143,     6,   150,  1274,     7,     7,
+       7,     6,   150,     6,     6,     6,    52,     4,     4,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,  1105,
+      57,     4,    59,    60,   150,    62,    63,    64,     6,     4,
+     150,    68,   150,   150,     6,  1121,   143,  1123,   561,   150,
+     144,   144,  1335,     7,     6,   147,  1132,     6,  1134,   572,
+       6,  1137,   150,    59,    91,    92,    93,   150,   150,     6,
+    1146,     6,   150,     6,     5,  1151,     4,  1275,     7,  1277,
+       6,     6,  1365,     7,  1367,     7,     7,  1031,   150,  1179,
+    1034,  1181,   150,  1183,   150,     6,     6,     4,     7,   147,
+    1190,  1384,  1192,  1179,     6,  1181,    95,  1183,     6,  1176,
+       6,     7,     8,     6,     6,  1191,     6,     6,   146,  1195,
+       6,     6,     6,     6,   151,     5,   150,     6,     6,    99,
+       6,  1207,  1208,     6,  1332,     4,     6,   149,  1214,     6,
+       6,     6,     3,     4,  1220,     4,     6,  1223,     9,    10,
+      11,     6,     6,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,  1250,     6,     6,   149,   149,  1123,
+     149,     6,   149,     6,     6,  1261,     7,  1277,  1264,   147,
+       6,  1267,     5,  1137,    50,  1271,     6,     6,     6,  1275,
+       6,  1277,     6,   150,     6,     6,   150,     6,   151,   150,
+    1286,   150,   150,  1289,     7,   728,   729,     6,   731,    94,
+     733,   734,     6,   150,   737,   738,     6,     6,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,     6,     6,    97,     6,   142,  1191,     6,   110,
+     150,   150,   113,   114,   115,     6,  1332,   124,   125,   126,
      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,     7,     6,  1099,     6,   142,  1329,     4,   147,  1026,
-     151,   151,  1029,     6,   147,     7,     7,     7,     4,  1115,
-       7,  1117,     7,     7,     7,   150,   143,     6,     6,   143,
-    1126,     6,  1128,   146,     6,  1131,  1359,     6,  1361,     7,
-     145,     6,   130,    52,  1140,     7,     7,    54,     7,  1145,
-       7,     7,     7,     6,  1269,  1378,  1271,     7,   144,   144,
-     144,   144,  1173,     7,  1175,     7,  1177,     7,     6,     6,
-       4,     6,   150,  1184,   143,  1186,     7,  1173,     6,  1175,
-       7,  1177,     7,  1170,   150,   726,   727,     6,   729,  1185,
-     731,   732,     6,  1189,   735,   736,     6,     6,    52,     4,
-    1117,     4,     4,     4,   150,  1201,  1202,   150,   150,   150,
-       6,  1326,  1208,     6,  1131,   150,     7,   143,  1214,     6,
-     150,  1217,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   144,   147,    59,   144,
-     142,     6,     6,     6,     6,     6,     5,   150,  1244,   150,
-     150,     4,   793,   794,   795,     6,   150,     7,     6,  1255,
-    1271,     7,  1258,     7,     7,  1261,     6,     6,  1185,  1265,
-     150,    95,     6,  1269,   150,  1271,     7,   147,     6,     4,
-       6,    99,     6,     6,  1280,     6,     6,  1283,   146,     3,
-       4,     6,    50,     6,     6,     9,    10,    11,     6,     5,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,     6,     6,   864,     6,     6,     6,     4,     6,   870,
-    1326,     6,    46,     6,     6,     6,   149,   878,   879,   880,
-       6,     6,     4,   884,   150,     6,     6,     6,   889,   890,
-     891,   149,  1269,     7,  1271,    69,    70,    71,    72,    73,
-     149,   149,   903,   149,    78,     6,   147,    81,   909,     6,
-       5,   912,     6,     6,     6,     6,   124,   125,   126,   127,
+     137,     6,   133,   134,   151,   142,    66,   138,     6,   151,
+     151,     6,   143,   151,   797,   798,   799,   148,   151,   150,
+       6,     6,   150,     6,     4,     6,   859,     6,     3,     4,
+       6,   151,     6,     6,     9,    10,    11,     6,     6,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+       6,  1275,   150,  1277,     6,   150,   150,     6,   150,     6,
+       6,    46,     6,     6,     6,   150,     6,   150,     6,     6,
+     150,     6,   150,   150,     6,   868,     6,     6,     6,     6,
+       6,   874,     6,  1250,    69,    70,    71,    72,    73,   882,
+     883,   884,     3,    78,   867,   888,    81,     3,  1257,     6,
+     893,   894,   895,   367,   897,   965,    -1,    -1,  1332,    -1,
+      -1,    -1,    -1,    -1,   907,    -1,    -1,    -1,    -1,    -1,
+     913,    -1,    -1,   916,    -1,   110,    -1,    -1,   113,   114,
+     115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   935,   936,   937,   938,     6,    -1,   133,   134,
+      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,
+      -1,    -1,    -1,   148,    -1,   150,   151,   960,    -1,    -1,
+      -1,     8,    -1,     3,     4,    -1,    -1,    -1,    -1,     9,
+      10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    -1,    -1,    -1,     6,    -1,
+      -1,  1004,  1005,  1006,  1007,    -1,    46,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    69,
+      70,    71,    72,    73,    -1,    -1,    -1,  1040,    78,    -1,
+      -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1056,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
+     110,    -1,   142,   113,   114,   115,    -1,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,    -1,    -1,   133,   134,   142,    -1,   144,   138,     6,
+      -1,    -1,    -1,   143,    -1,    -1,    -1,    -1,   148,    -1,
+      -1,   151,    -1,    -1,    -1,  1118,   124,   125,   126,   127,
      128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     931,   932,   933,   934,   142,     6,   110,     6,   150,   113,
-     114,   115,     6,   150,     6,     6,   151,     7,   150,  1326,
-       6,    94,   150,   150,   150,   956,     6,     6,    97,   133,
-     134,     6,     6,     6,   138,     6,     6,     6,   150,   143,
-      66,   150,     6,   151,   148,   151,   150,   151,     6,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   151,   151,   151,   150,   142,     6,  1000,
-    1001,  1002,  1003,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,     6,     6,     6,
-       4,   142,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,  1035,     6,     6,     6,   142,     6,
-       6,     6,     6,   151,     6,     6,     3,     4,   150,  1244,
-    1051,   150,     9,    10,    11,     6,     6,    14,    15,    16,
+      -1,    -1,    -1,    -1,   142,    -1,     3,     4,  1141,  1142,
+    1143,  1144,     9,    10,    11,    -1,    -1,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,   150,     6,
-     150,     6,     6,     6,     6,   150,     6,   150,     6,    46,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   150,     6,     6,     6,   142,     6,
-       6,  1112,    69,    70,    71,    72,    73,   150,   150,     6,
-       6,    78,     6,     6,    81,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,  1135,  1136,  1137,  1138,   142,     6,
-     855,   863,     3,     3,  1251,   961,    -1,   367,    -1,    -1,
-      -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,    -1,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,    -1,    -1,   133,   134,   142,    -1,
-    1181,   138,    -1,    -1,    -1,    -1,   143,    -1,    -1,    -1,
-      -1,   148,    -1,    -1,   151,     3,     4,     5,    -1,     7,
-      -1,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,  1228,    36,    37,
-      38,    39,    -1,    -1,    42,    -1,    -1,    12,    13,    -1,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+      -1,    -1,    -1,    -1,  1187,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    -1,    59,    60,    -1,    62,    63,    64,
-      -1,    -1,    -1,    68,    -1,    -1,   104,    -1,    -1,    -1,
-      -1,    -1,   110,   111,   112,   113,   114,   115,    -1,    -1,
-      -1,    -1,   120,   121,   122,   123,    91,    92,    93,    -1,
-      -1,    -1,    -1,    -1,    -1,   133,   134,    -1,    -1,    -1,
-     138,    -1,   140,   141,    -1,   143,    -1,   145,    -1,   147,
-     148,    -1,   150,     3,     4,     5,    -1,    -1,    -1,     9,
-      10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,   151,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    12,    13,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    69,
-      70,    71,    72,    73,     6,   149,    -1,   151,    78,    -1,
-      -1,    81,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    -1,    57,    -1,    59,    60,    -1,    62,    63,
-      64,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,
-     110,    -1,    -1,   113,   114,   115,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,    -1,   133,   134,    -1,    -1,    -1,   138,    -1,
-      -1,    -1,    -1,   143,    -1,     3,     4,     5,   148,    -1,
-     150,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,    46,    -1,
-      12,    13,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
-     142,    69,    70,    71,    72,    73,     6,    -1,    -1,    -1,
-      78,    -1,    -1,    81,    46,    47,    48,    49,    50,    51,
+      -1,    -1,    69,    70,    71,    72,    73,     6,    -1,    -1,
+      -1,    78,    -1,    -1,    81,    -1,    -1,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,  1234,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,    -1,    -1,    -1,   142,   143,    -1,     3,     4,
+       5,   148,     7,   150,     9,    10,    11,    -1,    -1,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      -1,    36,    37,    38,    39,    -1,    -1,    42,    -1,    -1,
+      12,    13,    -1,    -1,    -1,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
+      -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    -1,    57,    -1,    59,    60,    -1,
-      62,    63,    64,    -1,    -1,    -1,    68,    -1,    -1,    -1,
-      -1,    -1,   110,    -1,    -1,   113,   114,   115,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    -1,    -1,   133,   134,    -1,    -1,    -1,
-     138,    -1,    -1,    -1,    -1,   143,    -1,     3,     4,    -1,
-     148,    -1,   150,     9,    10,    11,    -1,    -1,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
-      46,    -1,    12,    13,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
-      -1,    -1,   142,    69,    70,    71,    72,    73,     6,    -1,
-      -1,    -1,    78,    -1,    -1,    81,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    -1,    57,    -1,    59,
-      60,    -1,    62,    63,    64,    -1,    -1,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,
+      62,    63,    64,    -1,    -1,    -1,    68,    -1,    -1,   104,
+      -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
+     115,    -1,    -1,    -1,    -1,   120,   121,   122,   123,    91,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    -1,   133,   134,
+      -1,    -1,    -1,   138,    -1,   140,   141,    -1,   143,    -1,
+     145,    -1,   147,   148,    -1,   150,     3,     4,     5,    -1,
+      -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,   151,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+      -1,    12,    13,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
+      -1,   142,    69,    70,    71,    72,    73,     6,   149,    -1,
+     151,    78,    -1,    -1,    81,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    -1,    57,    -1,    59,    60,
+      -1,    62,    63,    64,    -1,    -1,    -1,    68,    -1,    -1,
+      -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    93,    -1,    -1,    -1,   133,   134,    -1,
-      -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,     3,
-       4,    -1,   148,    -1,   150,     9,    10,    11,    -1,    -1,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   151,    46,    -1,    12,    13,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-      -1,    -1,    -1,    -1,   142,    69,    70,    71,    72,    73,
-       8,    -1,    -1,    -1,    78,    -1,    -1,    81,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
-      -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
-      68,    -1,    -1,    -1,     8,    -1,   110,    -1,    -1,   113,
-     114,   115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,   133,
-     134,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,   143,
-       8,     3,     4,    -1,   148,    -1,   150,     9,    10,    11,
-      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   151,    46,    -1,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-      -1,    -1,    -1,    -1,   142,    -1,    -1,    69,    70,    71,
-      72,    73,     8,    -1,    -1,    -1,    78,    -1,    -1,    81,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     8,    -1,   110,    -1,
-      -1,   113,   114,   115,    -1,    -1,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-      -1,   133,   134,    -1,   142,    -1,   138,    -1,    -1,    -1,
-      -1,   143,     8,     3,     4,    -1,   148,    -1,   150,     9,
-      10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    69,
-      70,    71,    72,    73,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    81,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
-     142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     110,    -1,    -1,   113,   114,   115,    -1,    -1,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,    -1,   133,   134,    -1,   142,    -1,   138,    -1,
-      -1,    -1,    -1,   143,    -1,     3,     4,     5,   148,    -1,
-     150,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
-      38,    39,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,    -1,    -1,    -1,    -1,     9,    10,
+      91,    92,    93,    -1,    -1,    -1,   133,   134,    -1,    -1,
+      -1,   138,    -1,    -1,    -1,    -1,   143,    -1,     3,     4,
+       5,   148,    -1,   150,     9,    10,    11,    -1,    -1,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     151,    46,    -1,    12,    13,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
+      -1,    -1,    -1,   142,    69,    70,    71,    72,    73,     6,
+      -1,    -1,    -1,    78,    -1,    -1,    81,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    -1,    57,    -1,
+      59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,   113,   114,
+     115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    93,    -1,    -1,    -1,   133,   134,
+      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,
+       3,     4,    -1,   148,    -1,   150,     9,    10,    11,    -1,
+      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   151,    46,    -1,    12,    13,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,    -1,    -1,    -1,    -1,   142,    69,    70,    71,    72,
+      73,     6,    -1,    -1,    -1,    78,    -1,    -1,    81,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,
+      -1,    68,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
+     113,   114,   115,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,
+     133,   134,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
+     143,    -1,     3,     4,    -1,   148,    -1,   150,     9,    10,
       11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,   110,   111,   112,   113,   114,   115,    69,    70,
-      71,    72,    73,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      81,    -1,    -1,    -1,    -1,   133,   134,    -1,    -1,    -1,
-     138,    -1,    -1,    -1,    -1,   143,    -1,    -1,    -1,    -1,
-     148,    -1,   150,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-      -1,    -1,   113,   114,   115,    -1,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-      -1,    -1,   133,   134,   142,    -1,    -1,   138,    -1,    -1,
+      -1,    -1,    -1,    -1,   151,    46,    -1,    12,    13,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,    -1,    -1,    -1,    -1,   142,    69,    70,
+      71,    72,    73,     6,    -1,    -1,    -1,    78,    -1,    -1,
+      81,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    59,    60,    -1,    62,    63,    64,
+      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,   110,
+      -1,    -1,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
+      -1,    -1,   133,   134,    -1,    -1,    -1,   138,    -1,    -1,
       -1,    -1,   143,    -1,     3,     4,    -1,   148,    -1,   150,
        9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    12,    13,     3,     4,    -1,    -1,    -1,    -1,     9,
-      10,    11,    -1,    -1,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    -1,    57,    -1,    59,    60,
-      -1,    62,    63,    64,    -1,    -1,    -1,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   151,    46,    -1,    12,
+      13,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
+      69,    70,    71,    72,    73,     6,    -1,    -1,    -1,    78,
+      -1,    -1,    81,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    -1,    57,    -1,    59,    60,    -1,    62,
+      63,    64,    -1,    -1,    -1,    68,    -1,     6,    -1,    -1,
       -1,   110,    -1,    -1,   113,   114,   115,    -1,    -1,    -1,
-      91,    92,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   133,   134,    -1,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,   143,    -1,    -1,   146,    -1,   148,
-     110,   150,    -1,   113,   114,   115,    -1,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,    -1,    -1,   133,   134,   142,    -1,    -1,   138,    -1,
-      -1,    -1,   149,   143,   151,    -1,   146,    -1,   148,    -1,
-     150,     3,     4,    -1,    -1,    -1,    -1,     9,    10,    11,
-      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,    -1,     3,     4,
-      -1,   142,    -1,   144,     9,    10,    11,    -1,   149,    14,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      93,    -1,    -1,    -1,   133,   134,    -1,    -1,    -1,   138,
+      -1,    -1,     6,    -1,   143,    -1,     3,     4,    -1,   148,
+      -1,   150,     9,    10,    11,    -1,    -1,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,    46,
+      -1,    -1,    -1,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
+      -1,   142,    69,    70,    71,    72,    73,    -1,    -1,    -1,
+      -1,    78,    -1,    -1,    81,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
+      -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,    -1,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,    -1,    -1,   133,   134,   142,    -1,
+      -1,   138,    -1,    -1,    -1,    -1,   143,    -1,     3,     4,
+       5,   148,    -1,   150,     9,    10,    11,    -1,    -1,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      -1,    36,    37,    38,    39,    -1,    -1,    42,    -1,    -1,
+      -1,    -1,    -1,     8,    -1,     3,     4,    -1,    -1,    -1,
+      -1,     9,    10,    11,    -1,    -1,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,    -1,    -1,   110,    -1,
-     142,   113,   114,   115,    69,    70,    71,    72,    73,   151,
-      -1,    -1,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,
-      -1,   133,   134,    -1,    -1,    -1,   138,    -1,    -1,    -1,
-      -1,   143,    -1,    -1,    -1,    -1,   148,    -1,   150,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,   113,   114,
-     115,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,    -1,    -1,   133,   134,
-     142,    -1,    -1,   138,     3,     4,     5,   149,   143,   151,
-       9,    10,    11,   148,    -1,    14,    15,    16,    17,    18,
+      -1,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
+     115,    69,    70,    71,    72,    73,    -1,    -1,    -1,    -1,
+      78,    -1,    -1,    81,    -1,    -1,    -1,    -1,   133,   134,
+      -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,
+      -1,    -1,     8,   148,    -1,   150,    -1,    -1,    -1,    -1,
+      -1,    -1,   110,    -1,    -1,   113,   114,   115,    -1,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,    -1,    -1,   133,   134,   142,    -1,    -1,
+     138,    -1,    -1,    -1,    -1,   143,     8,     3,     4,    -1,
+     148,    -1,   150,     9,    10,    11,    -1,    -1,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    66,
+      -1,    -1,    -1,    -1,     8,    -1,     3,     4,    -1,    -1,
+      -1,    -1,     9,    10,    11,    -1,    -1,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,    -1,    -1,    -1,    -1,   142,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,    -1,    -1,    -1,   110,   142,    -1,   113,   114,   115,
+      -1,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,    -1,   133,   134,    -1,
+     142,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,    -1,
+     146,    -1,   148,   110,   150,    -1,   113,   114,   115,    -1,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,    -1,    -1,   133,   134,   142,    -1,
+      -1,   138,    -1,    -1,    -1,    -1,   143,    -1,    -1,   146,
+      -1,   148,     8,   150,     3,     4,    -1,    -1,    -1,    -1,
+       9,    10,    11,    -1,    -1,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    -1,    36,    37,    38,
-      39,     3,     4,    42,    -1,    -1,    -1,     9,    10,    11,
-      -1,    -1,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
-      -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     151,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   110,   111,   112,   113,   114,   115,    -1,   124,   125,
+      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,
+      69,    70,    71,    72,    73,     8,   151,     3,     4,    78,
+      -1,    -1,    81,     9,    10,    11,    -1,    -1,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
+      -1,   110,    -1,    -1,   113,   114,   115,    -1,   124,   125,
      126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
      136,   137,    -1,    -1,   133,   134,   142,    -1,    -1,   138,
-      -1,    -1,    -1,    -1,   143,   151,    -1,    -1,   110,   148,
-      -1,   113,   114,   115,     0,     1,    -1,    -1,     4,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    12,    13,    -1,    -1,
-      -1,   133,   134,    -1,    -1,    -1,   138,    -1,    -1,    -1,
-      -1,   143,    -1,    -1,    -1,    -1,   148,    -1,    -1,    35,
-      -1,    -1,    -1,    -1,    40,    41,    -1,    43,    44,    -1,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      -1,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      -1,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
-      -1,    -1,    -1,    -1,    90,    91,    92,    93,    -1,    -1,
-      96,    -1,    98,    -1,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,    -1,    -1,     4,    -1,    -1,    -1,
-     116,   117,   118,   119,    12,    13,    -1,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,    -1,    -1,    -1,    -1,   142,    -1,    35,    -1,    -1,
-      -1,    -1,    40,    41,   151,    43,    44,    -1,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    -1,    67,
-      68,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,
-      -1,    -1,    90,    91,    92,    93,    -1,    -1,    96,    -1,
-      98,    -1,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,
-     118,   119,   124,   125,   126,   127,   128,   129,   130,   131,
+       3,     4,     5,    -1,   143,    -1,     9,    10,    11,   148,
+      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    -1,    36,    37,    38,    39,    -1,    -1,    42,
+      -1,    -1,    -1,    -1,   110,    -1,    -1,   113,   114,   115,
+      -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,    -1,    -1,   133,   134,   142,
+      -1,    -1,   138,    -1,    -1,    -1,    -1,   143,    -1,    -1,
+      -1,    -1,   148,    -1,    -1,    -1,    -1,    -1,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,    -1,    -1,    -1,    -1,   142,   110,   111,   112,
+     113,   114,   115,     0,     1,   151,    -1,     4,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    12,    13,    -1,    -1,    -1,
+     133,   134,    -1,    -1,    -1,   138,    -1,    -1,    -1,    -1,
+     143,    -1,    -1,    -1,    -1,   148,    -1,    -1,    35,    -1,
+      -1,    -1,    -1,    40,    41,    -1,    43,    44,    -1,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    -1,
+      67,    68,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    -1,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    90,    91,    92,    93,    -1,    -1,    96,
+      -1,    98,    -1,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,    -1,    -1,     4,    -1,    -1,    -1,   116,
+     117,   118,   119,    12,    13,    -1,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+      -1,    -1,    -1,    -1,   142,    -1,    35,    -1,    -1,    -1,
+      -1,    40,    41,   151,    43,    44,    -1,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    -1,    67,    68,
+      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
+      79,    80,    81,    -1,    -1,    84,    85,    12,    13,    -1,
+      -1,    90,    91,    92,    93,    -1,    -1,    96,    -1,    98,
+      -1,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,
+     119,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    -1,    57,    -1,    59,    60,    -1,    62,    63,    64,
+      -1,    -1,    -1,    68,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
+      -1,    -1,   142,    -1,    -1,    -1,    91,    92,    93,   149,
+      -1,   151,   124,   125,   126,   127,   128,   129,   130,   131,
      132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
-     142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
+     142,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,   151,
      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
      134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,   124,   125,
@@ -2653,9 +2695,12 @@ static const yytype_int16 yycheck[] =
       -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   151,   124,   125,   126,   127,   128,   129,   130,   131,
      132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
-     142,    -1,    -1,    -1,    -1,    -1,    -1,   149,   124,   125,
+     142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,   124,   125,
      126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
+     136,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,    -1,
       -1,    -1,    -1,   149,   124,   125,   126,   127,   128,   129,
      130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
       -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,
@@ -2723,14 +2768,10 @@ static const yytype_int16 yycheck[] =
      136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,
       -1,    -1,    -1,   149,   124,   125,   126,   127,   128,   129,
      130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
-      -1,    -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,
+      -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    -1,   149,
      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
      134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
-      -1,    -1,   146,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
-      -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,    -1,   149,   124,   125,   126,   127,
      128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
       -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
@@ -2797,9 +2838,14 @@ static const yytype_int16 yycheck[] =
      137,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,
      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
      134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,
-     144,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,   142,
-      -1,   144,   124,   125,   126,   127,   128,   129,   130,   131,
+      -1,    -1,   146,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
+      -1,   142,    -1,    -1,    -1,   146,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+      -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,   146,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,    -1,    -1,    -1,    -1,   142,    -1,    -1,
+      -1,   146,   124,   125,   126,   127,   128,   129,   130,   131,
      132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
      142,    -1,   144,   124,   125,   126,   127,   128,   129,   130,
      131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
@@ -2908,7 +2954,11 @@ static const yytype_int16 yycheck[] =
      132,   133,   134,   135,   136,   137,    -1,    -1,    -1,    -1,
      142,    -1,   144,   124,   125,   126,   127,   128,   129,   130,
      131,   132,   133,   134,   135,   136,   137,    -1,    -1,    -1,
-      -1,   142
+      -1,   142,    -1,   144,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
+      -1,    -1,   142,    -1,   144,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
+      -1,    -1,    -1,   142
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2952,7 +3002,7 @@ static const yytype_uint8 yystos[] =
      221,   228,   229,   221,   221,   143,   221,   229,   221,   221,
      143,   229,   221,   221,   134,   150,   221,   226,   228,   143,
      150,   143,   143,     5,   226,   227,   227,   227,   143,   182,
-     183,   184,   185,   143,   143,   143,   226,   226,     4,   226,
+     183,   184,   185,   143,   143,   143,   226,   221,     4,   226,
      223,   223,   223,   221,   221,   133,   134,   150,   150,   223,
      150,   150,   150,   133,   134,   143,   188,   223,   150,   143,
      150,   143,   143,   227,   226,   143,     4,     6,   145,   145,
@@ -2972,88 +3022,89 @@ static const yytype_uint8 yystos[] =
      144,   144,   221,   144,   151,   144,   144,   221,   151,   144,
      144,   150,   151,   229,   135,     7,   221,   221,   221,   221,
        7,     7,   214,   214,   221,   143,   143,   143,   143,   221,
-     221,   221,     7,     7,   144,     6,   149,   149,   149,   223,
-     223,   187,   187,   149,   221,   221,   221,   221,   199,   149,
-     188,   221,   221,   221,   221,     7,   215,     7,   221,     6,
-     221,   221,   151,   229,   221,   221,   144,   144,   144,    96,
-     149,   188,   150,     8,   144,   146,   151,   151,   145,   147,
-     144,   144,   144,   144,   221,   146,   176,   221,     4,    86,
-      87,    88,    89,   151,   163,   167,   170,   172,   173,   144,
+     221,   221,     7,   133,   134,   226,   144,     6,   149,   149,
+     149,   223,   223,   187,   187,   149,   221,   221,   221,   221,
+     199,   149,   188,   221,   221,   221,   221,     7,   215,     7,
+     221,     6,   221,   221,   151,   229,   221,   221,   144,   144,
+     144,    96,   149,   188,   150,     8,   144,   146,   151,   151,
+     145,   147,   144,   144,   144,   144,   221,   146,   176,   221,
+       4,    86,    87,    88,    89,   151,   163,   167,   170,   172,
+     173,   144,   146,   144,   146,   144,   146,   144,   146,   144,
      146,   144,   146,   144,   146,   144,   146,   144,   146,   144,
-     146,   144,   146,   144,   146,   144,   146,   144,   146,   144,
-     146,   149,   149,   144,   146,   144,   146,   144,   146,   144,
-     146,   144,   146,   144,   146,   149,   149,   149,   149,   149,
-     149,   144,   149,   149,   144,   144,     6,   149,   144,   149,
-     221,   226,   226,   151,     7,   147,   175,   176,   234,   221,
-       6,     4,     4,   150,   231,   146,   150,   150,   150,   150,
-       8,     6,   130,   157,   229,   221,     7,   146,   150,   221,
-     221,   221,   228,   221,   228,    99,     7,     7,   144,     7,
-      99,     7,     7,   144,    99,     7,     7,   229,   151,   150,
-     221,   144,   151,   144,   144,   221,   226,     4,   213,     6,
-     144,   178,   221,   234,   178,   178,   178,   144,   144,   144,
-     226,   226,   147,   223,   221,   221,   151,   151,   221,   149,
-     149,   149,    76,    82,    83,   209,   210,   223,   151,   196,
-     144,   151,   144,   144,   221,     6,   221,   144,   146,   146,
-     151,   146,   146,     7,     7,     7,   147,   221,   151,   221,
-     221,     7,   147,   221,     4,     7,     7,     7,     7,   146,
-     147,   176,   233,   151,   164,   143,   143,   150,   174,     6,
-     221,   221,   221,   221,   221,   221,   221,   221,   229,   233,
-     221,   233,   146,     6,     6,   146,     4,    96,    97,   221,
-       6,     6,     6,     7,   145,   230,   232,     6,   229,   229,
-     229,   229,   221,   130,   233,   144,   149,   223,   229,   151,
-       8,    52,   226,   226,     7,   226,    52,    54,   226,   226,
-       7,    54,   226,   226,   151,   229,     6,     7,     7,     7,
-       7,    66,   212,     6,     7,   144,   144,   144,   144,     7,
-       7,     7,     6,     6,     4,   149,   149,   149,   151,   223,
-     223,   223,     6,   150,   143,   151,   210,   149,   209,     7,
-       6,     7,     7,     6,   150,     6,     6,    52,     6,     6,
-     226,   226,   226,     4,   149,     8,     8,   144,     4,     4,
-     146,   150,   150,   150,   150,     6,     4,     6,   143,   221,
-     221,   225,   226,   150,   144,   146,   144,   146,   144,   146,
-     144,   146,   144,   144,   144,   144,   175,     7,   175,   176,
-     147,     7,     6,   230,   221,   149,   151,   151,   151,   151,
-     151,     6,     6,   157,   221,     6,   151,   221,   150,    59,
-     180,   180,   226,     6,   150,   150,     6,     6,   226,   150,
-       6,     6,   151,     5,   226,   226,   226,     4,     6,   226,
-       7,     7,     7,     7,   226,   226,   226,     6,     7,   221,
-     221,   221,   150,   149,   151,   149,   151,   149,   151,   221,
-     226,   221,   221,   223,   151,     5,   150,   226,   150,   150,
-     226,   229,   150,     6,     6,    95,   221,   221,   221,     6,
-       7,   147,   226,   226,   226,   226,   176,   161,   221,   149,
-     149,   149,   151,   162,   221,   226,   234,   221,     6,     4,
-     231,     6,   146,   230,     6,     6,     6,     6,   233,   149,
-     146,   221,   223,     6,     6,     6,   221,   221,     6,   221,
-       5,     6,     6,    99,   179,   221,     6,   226,   226,   226,
-     226,     6,     4,   211,     6,   221,   234,   151,   144,   149,
-     151,   187,   223,     6,   200,   223,     6,   201,   223,     6,
-     202,   151,   149,   144,   151,   149,     6,   134,   223,     6,
-     223,   223,     6,   151,   221,   226,   149,   151,     8,   151,
-     144,   150,   221,   234,     4,   149,   149,   149,   149,   144,
-     149,   221,   221,   226,   150,   149,   151,     6,     6,     6,
-       7,     6,   147,     6,   221,   151,   151,   151,   151,     5,
-      50,     6,     6,     6,     6,     6,   150,     6,     6,     6,
-     150,   221,   151,   149,   150,   149,   150,   149,   150,     6,
-     226,     7,   150,   221,   149,   149,   149,     6,   151,    94,
-     221,   221,   229,     6,     6,   226,   226,   226,   226,   165,
-     221,   149,   149,   225,   221,     6,   230,    97,   149,     6,
-       6,     6,     6,     6,   150,   225,   187,   149,   151,   221,
-     223,   209,   221,   223,   209,   221,   223,   209,   149,   151,
-     226,   188,   151,   223,   229,   223,   221,   151,   151,   151,
-     151,   151,   151,   151,   150,   221,   221,   151,     6,   221,
-     221,   151,   151,   221,   151,   149,   151,   151,   149,   151,
-     151,   149,   151,   226,     6,    66,   151,   197,   150,   149,
-     151,   149,     6,     6,     6,     6,     6,     6,   162,   144,
-     149,     6,   150,   149,   151,     4,   211,   151,     6,   203,
-     221,     6,     6,   204,   221,     6,     6,   205,   221,     6,
-     151,   221,   209,   188,   229,     6,   223,   229,   151,   168,
-     221,   225,   221,     6,   150,   151,   150,   151,   150,   151,
-       6,     6,   151,   151,   198,   151,   149,   151,     6,   150,
-     144,   151,   151,   209,     6,   206,   209,     6,   207,   209,
-       6,   208,   209,     6,   229,     6,   166,   233,   171,   150,
-       6,   151,   150,   151,   150,   151,   150,   151,   151,   149,
-     151,   150,   225,     6,   209,     6,   209,     6,   209,     6,
-     233,     6,   169,   233,   151,   151,   151,   151,   149,   151,
-       6,     6,     6,     6,   233,     6
+     146,   144,   146,   149,   149,   144,   146,   144,   146,   144,
+     146,   144,   146,   144,   146,   144,   146,   149,   149,   149,
+     149,   149,   149,   144,   149,   149,   144,   144,     6,   149,
+     144,   149,   221,   226,   226,   151,     7,   147,   175,   176,
+     234,   221,     6,     4,     4,   150,   231,   146,   150,   150,
+     150,   150,     8,     6,   130,   157,   229,   221,     7,   146,
+     150,   221,   221,   221,   228,   221,   228,    99,     7,     7,
+     144,     7,    99,     7,     7,   144,    99,     7,     7,   229,
+     151,   150,   221,   144,   151,   144,   144,   221,   226,     4,
+     213,     6,   144,   178,   221,   234,   178,   178,   178,   144,
+     144,   144,   226,   221,   221,     7,   147,   223,   221,   221,
+     151,   151,   221,   149,   149,   149,    76,    82,    83,   209,
+     210,   223,   151,   196,   144,   151,   144,   144,   221,     6,
+     221,   144,   146,   146,   151,   146,   146,     7,     7,     7,
+     147,   221,   151,   221,   221,     7,   147,   221,     4,     7,
+       7,     7,     7,   146,   147,   176,   233,   151,   164,   143,
+     143,   150,   174,     6,   221,   221,   221,   221,   221,   221,
+     221,   221,   229,   233,   221,   233,   146,     6,     6,   146,
+       4,    96,    97,   221,     6,     6,     6,     7,   145,   230,
+     232,     6,   229,   229,   229,   229,   221,   130,   233,   144,
+     149,   223,   229,   151,     8,    52,   226,   226,     7,   226,
+      52,    54,   226,   226,     7,    54,   226,   226,   151,   229,
+       6,     7,     7,     7,     7,    66,   212,     6,     7,   144,
+     144,   144,   144,     7,     7,     7,     6,   221,     4,   149,
+     149,   149,   151,   223,   223,   223,     6,   150,   143,   151,
+     210,   149,   209,     7,     6,     7,     7,     6,   150,     6,
+       6,    52,     6,     6,   226,   226,   226,     4,   149,     8,
+       8,   144,     4,     4,   146,   150,   150,   150,   150,     6,
+       4,     6,   143,   221,   221,   225,   226,   150,   144,   146,
+     144,   146,   144,   146,   144,   146,   144,   144,   144,   144,
+     175,     7,   175,   176,   147,     7,     6,   230,   221,   149,
+     151,   151,   151,   151,   151,     6,     6,   157,   221,     6,
+     151,   221,   150,    59,   180,   180,   226,     6,   150,   150,
+       6,     6,   226,   150,     6,     6,   151,     5,   226,   226,
+     226,     4,     6,   226,     7,     7,     7,     7,   226,   226,
+     226,   226,     6,     7,   221,   221,   221,   150,   149,   151,
+     149,   151,   149,   151,   221,   226,   221,   221,   223,   151,
+       5,   150,   226,   150,   150,   226,   229,   150,     6,     6,
+      95,   221,   221,   221,     6,     7,   147,   226,   226,   226,
+     226,   176,   161,   221,   149,   149,   149,   151,   162,   221,
+     226,   234,   221,     6,     4,   231,     6,   146,   230,     6,
+       6,     6,     6,   233,   149,   146,   221,   223,     6,     6,
+       6,   221,   221,     6,   221,     5,     6,     6,    99,   179,
+     221,     6,   226,   226,   226,   226,     6,     4,   211,     6,
+       6,   221,   234,   151,   144,   149,   151,   187,   223,     6,
+     200,   223,     6,   201,   223,     6,   202,   151,   149,   144,
+     151,   149,     6,   134,   223,     6,   223,   223,     6,   151,
+     221,   226,   149,   151,     8,   151,   144,   150,   221,   234,
+       4,   149,   149,   149,   149,   144,   149,   221,   221,   226,
+     150,   149,   151,     6,     6,     6,     7,     6,   147,     6,
+     221,   151,   151,   151,   151,     5,    50,     6,     6,     6,
+       6,     6,   150,     6,     6,     6,   150,   221,   151,   149,
+     150,   149,   150,   149,   150,     6,   226,     7,   150,   221,
+     149,   149,   149,     6,   151,    94,   221,   221,   229,     6,
+       6,   226,   226,   226,   226,   165,   221,   149,   149,   225,
+     221,     6,   230,    97,   149,     6,     6,     6,     6,     6,
+     150,   225,   187,   149,   151,   221,   223,   209,   221,   223,
+     209,   221,   223,   209,   149,   151,   226,   188,   151,   223,
+     229,   223,   221,   151,   151,   151,   151,   151,   151,   151,
+     150,   221,   221,   151,     6,   221,   221,   151,   151,   221,
+     151,   149,   151,   151,   149,   151,   151,   149,   151,   226,
+       6,    66,   151,   197,   150,   149,   151,   149,     6,     6,
+       6,     6,     6,     6,   162,   144,   149,     6,   150,   149,
+     151,     4,   211,   151,     6,   203,   221,     6,     6,   204,
+     221,     6,     6,   205,   221,     6,   151,   221,   209,   188,
+     229,     6,   223,   229,   151,   168,   221,   225,   221,     6,
+     150,   151,   150,   151,   150,   151,     6,     6,   151,   151,
+     198,   151,   149,   151,     6,   150,   144,   151,   151,   209,
+       6,   206,   209,     6,   207,   209,     6,   208,   209,     6,
+     229,     6,   166,   233,   171,   150,     6,   151,   150,   151,
+     150,   151,   150,   151,   151,   149,   151,   150,   225,     6,
+     209,     6,   209,     6,   209,     6,   233,     6,   169,   233,
+     151,   151,   151,   151,   149,   151,     6,     6,     6,     6,
+     233,     6
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -7493,33 +7544,44 @@ yyreduce:
   case 245:
 #line 3252 "Gmsh.y"
     {
-      if (List_Nbr((yyvsp[(3) - (6)].l)) != List_Nbr((yyvsp[(5) - (6)].l))){
-	yymsg(0, "Periodic Surface : the number of masters (%d) is not equal to the number of slaves(%d)", List_Nbr((yyvsp[(3) - (6)].l)),List_Nbr((yyvsp[(5) - (6)].l)));
-      }
-
-      for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
-	double d_master,d_slave;
-	List_Read((yyvsp[(3) - (6)].l), i, &d_master);
-	List_Read((yyvsp[(5) - (6)].l), i, &d_slave);
-	int j_master = (int)d_master;
-	int j_slave  = (int)d_slave;
-	Surface *s_slave = FindSurface(abs(j_slave));
-	if(s_slave){
-	  s_slave->meshMaster = j_master;
+      if (List_Nbr((yyvsp[(4) - (8)].l)) != List_Nbr((yyvsp[(7) - (8)].l))){
+	yymsg(0, "Periodic Surface : the number of masters (%d) is not equal to the number of slaves(%d)", List_Nbr((yyvsp[(4) - (8)].l)),List_Nbr((yyvsp[(7) - (8)].l)));
+      }
+
+      double d_master = (yyvsp[(3) - (8)].d) ,d_slave = (yyvsp[(6) - (8)].d);
+      int j_master = (int)d_master;
+      int j_slave  = (int)d_slave;
+      Surface *s_slave = FindSurface(abs(j_slave));
+      if(s_slave){
+	s_slave->meshMaster = j_master;
+	for (int i=0;i<List_Nbr((yyvsp[(4) - (8)].l));i++){
+	  double dm,ds;
+	  List_Read((yyvsp[(4) - (8)].l),i,&dm);
+	  List_Read((yyvsp[(7) - (8)].l),i,&ds);	  
+	  s_slave->edgeCounterparts[(int)ds] = (int)dm;
 	}
-	else{
-	  GFace *gf = GModel::current()->getFaceByTag(abs(j_slave));
-	  if(gf) gf->setMeshMaster (j_master);
-	  else yymsg(0, "Unknown line %d", j_slave);
+      }
+      else{
+	GFace *gf = GModel::current()->getFaceByTag(abs(j_slave));
+	if(gf) gf->setMeshMaster (j_master);
+	else yymsg(0, "Unknown surface %d", j_slave);
+
+	for (int i=0;i<List_Nbr((yyvsp[(4) - (8)].l));i++){
+	  double dm,ds;
+	  List_Read((yyvsp[(4) - (8)].l),i,&dm);
+	  List_Read((yyvsp[(7) - (8)].l),i,&ds);
+	  gf->edgeCounterparts[(int)ds] = (int)dm;
 	}
+
       }
-      List_Delete((yyvsp[(3) - (6)].l));
-      List_Delete((yyvsp[(5) - (6)].l));
+
+      List_Delete((yyvsp[(4) - (8)].l));
+      List_Delete((yyvsp[(7) - (8)].l));
     ;}
     break;
 
   case 246:
-#line 3284 "Gmsh.y"
+#line 3295 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7545,7 +7607,7 @@ yyreduce:
     break;
 
   case 247:
-#line 3307 "Gmsh.y"
+#line 3318 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7571,26 +7633,26 @@ yyreduce:
     break;
 
   case 248:
-#line 3330 "Gmsh.y"
+#line 3341 "Gmsh.y"
     {
     ;}
     break;
 
   case 249:
-#line 3333 "Gmsh.y"
+#line 3344 "Gmsh.y"
     {
     ;}
     break;
 
   case 250:
-#line 3342 "Gmsh.y"
+#line 3353 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 251:
-#line 3346 "Gmsh.y"
+#line 3357 "Gmsh.y"
     { 
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -7603,7 +7665,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3363 "Gmsh.y"
+#line 3374 "Gmsh.y"
     {
     
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
@@ -7642,7 +7704,7 @@ yyreduce:
     break;
 
   case 253:
-#line 3400 "Gmsh.y"
+#line 3411 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7680,7 +7742,7 @@ yyreduce:
     break;
 
   case 254:
-#line 3436 "Gmsh.y"
+#line 3447 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7718,7 +7780,7 @@ yyreduce:
     break;
 
   case 255:
-#line 3471 "Gmsh.y"
+#line 3482 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7756,47 +7818,47 @@ yyreduce:
     break;
 
   case 256:
-#line 3510 "Gmsh.y"
+#line 3521 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 257:
-#line 3511 "Gmsh.y"
+#line 3522 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 258:
-#line 3512 "Gmsh.y"
+#line 3523 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 259:
-#line 3513 "Gmsh.y"
+#line 3524 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 260:
-#line 3514 "Gmsh.y"
+#line 3525 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 261:
-#line 3515 "Gmsh.y"
+#line 3526 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 262:
-#line 3516 "Gmsh.y"
+#line 3527 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 263:
-#line 3517 "Gmsh.y"
+#line 3528 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 264:
-#line 3519 "Gmsh.y"
+#line 3530 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -7806,307 +7868,307 @@ yyreduce:
     break;
 
   case 265:
-#line 3525 "Gmsh.y"
+#line 3536 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 266:
-#line 3526 "Gmsh.y"
+#line 3537 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 267:
-#line 3527 "Gmsh.y"
+#line 3538 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 268:
-#line 3528 "Gmsh.y"
+#line 3539 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 269:
-#line 3529 "Gmsh.y"
+#line 3540 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 270:
-#line 3530 "Gmsh.y"
+#line 3541 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 271:
-#line 3531 "Gmsh.y"
+#line 3542 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 272:
-#line 3532 "Gmsh.y"
+#line 3543 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 273:
-#line 3533 "Gmsh.y"
+#line 3544 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 274:
-#line 3534 "Gmsh.y"
+#line 3545 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 275:
-#line 3535 "Gmsh.y"
+#line 3546 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 276:
-#line 3536 "Gmsh.y"
+#line 3547 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 277:
-#line 3537 "Gmsh.y"
+#line 3548 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 278:
-#line 3538 "Gmsh.y"
+#line 3549 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 279:
-#line 3539 "Gmsh.y"
+#line 3550 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 3540 "Gmsh.y"
+#line 3551 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 281:
-#line 3541 "Gmsh.y"
+#line 3552 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 3542 "Gmsh.y"
+#line 3553 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 283:
-#line 3543 "Gmsh.y"
+#line 3554 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 284:
-#line 3544 "Gmsh.y"
+#line 3555 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 285:
-#line 3545 "Gmsh.y"
+#line 3556 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 286:
-#line 3546 "Gmsh.y"
+#line 3557 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 287:
-#line 3547 "Gmsh.y"
+#line 3558 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 288:
-#line 3548 "Gmsh.y"
+#line 3559 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 289:
-#line 3549 "Gmsh.y"
+#line 3560 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 290:
-#line 3550 "Gmsh.y"
+#line 3561 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 291:
-#line 3551 "Gmsh.y"
+#line 3562 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 292:
-#line 3552 "Gmsh.y"
+#line 3563 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 293:
-#line 3553 "Gmsh.y"
+#line 3564 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 294:
-#line 3554 "Gmsh.y"
+#line 3565 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 295:
-#line 3555 "Gmsh.y"
+#line 3566 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 296:
-#line 3556 "Gmsh.y"
+#line 3567 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 297:
-#line 3558 "Gmsh.y"
+#line 3569 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 298:
-#line 3559 "Gmsh.y"
+#line 3570 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 299:
-#line 3560 "Gmsh.y"
+#line 3571 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 300:
-#line 3561 "Gmsh.y"
+#line 3572 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 301:
-#line 3562 "Gmsh.y"
+#line 3573 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 302:
-#line 3563 "Gmsh.y"
+#line 3574 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 303:
-#line 3564 "Gmsh.y"
+#line 3575 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 304:
-#line 3565 "Gmsh.y"
+#line 3576 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 305:
-#line 3566 "Gmsh.y"
+#line 3577 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 306:
-#line 3567 "Gmsh.y"
+#line 3578 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 307:
-#line 3568 "Gmsh.y"
+#line 3579 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 308:
-#line 3569 "Gmsh.y"
+#line 3580 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 309:
-#line 3570 "Gmsh.y"
+#line 3581 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 310:
-#line 3571 "Gmsh.y"
+#line 3582 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 311:
-#line 3572 "Gmsh.y"
+#line 3583 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 312:
-#line 3573 "Gmsh.y"
+#line 3584 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 313:
-#line 3574 "Gmsh.y"
+#line 3585 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 314:
-#line 3575 "Gmsh.y"
+#line 3586 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 315:
-#line 3576 "Gmsh.y"
+#line 3587 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 316:
-#line 3577 "Gmsh.y"
+#line 3588 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 317:
-#line 3578 "Gmsh.y"
+#line 3589 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 318:
-#line 3587 "Gmsh.y"
+#line 3598 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 319:
-#line 3588 "Gmsh.y"
+#line 3599 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 320:
-#line 3589 "Gmsh.y"
+#line 3600 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 321:
-#line 3590 "Gmsh.y"
+#line 3601 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 322:
-#line 3591 "Gmsh.y"
+#line 3602 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 323:
-#line 3592 "Gmsh.y"
+#line 3603 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 324:
-#line 3593 "Gmsh.y"
+#line 3604 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 325:
-#line 3598 "Gmsh.y"
+#line 3609 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8125,7 +8187,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3617 "Gmsh.y"
+#line 3628 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -8146,7 +8208,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3635 "Gmsh.y"
+#line 3646 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -8164,7 +8226,7 @@ yyreduce:
     break;
 
   case 328:
-#line 3650 "Gmsh.y"
+#line 3661 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -8177,7 +8239,7 @@ yyreduce:
     break;
 
   case 329:
-#line 3660 "Gmsh.y"
+#line 3671 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -8196,7 +8258,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3676 "Gmsh.y"
+#line 3687 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -8214,7 +8276,7 @@ yyreduce:
     break;
 
   case 331:
-#line 3694 "Gmsh.y"
+#line 3705 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -8222,7 +8284,7 @@ yyreduce:
     break;
 
   case 332:
-#line 3699 "Gmsh.y"
+#line 3710 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -8230,7 +8292,7 @@ yyreduce:
     break;
 
   case 333:
-#line 3704 "Gmsh.y"
+#line 3715 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -8243,7 +8305,7 @@ yyreduce:
     break;
 
   case 334:
-#line 3714 "Gmsh.y"
+#line 3725 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -8256,7 +8318,7 @@ yyreduce:
     break;
 
   case 335:
-#line 3724 "Gmsh.y"
+#line 3735 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -8264,70 +8326,70 @@ yyreduce:
     break;
 
   case 336:
-#line 3732 "Gmsh.y"
+#line 3743 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 337:
-#line 3736 "Gmsh.y"
+#line 3747 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 338:
-#line 3740 "Gmsh.y"
+#line 3751 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 339:
-#line 3744 "Gmsh.y"
+#line 3755 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 340:
-#line 3748 "Gmsh.y"
+#line 3759 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 341:
-#line 3755 "Gmsh.y"
+#line 3766 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
   case 342:
-#line 3759 "Gmsh.y"
+#line 3770 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 343:
-#line 3763 "Gmsh.y"
+#line 3774 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 344:
-#line 3767 "Gmsh.y"
+#line 3778 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 345:
-#line 3774 "Gmsh.y"
+#line 3785 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -8335,14 +8397,14 @@ yyreduce:
     break;
 
   case 346:
-#line 3779 "Gmsh.y"
+#line 3790 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 347:
-#line 3786 "Gmsh.y"
+#line 3797 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8350,14 +8412,14 @@ yyreduce:
     break;
 
   case 348:
-#line 3791 "Gmsh.y"
+#line 3802 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 349:
-#line 3795 "Gmsh.y"
+#line 3806 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -8365,14 +8427,14 @@ yyreduce:
     break;
 
   case 350:
-#line 3800 "Gmsh.y"
+#line 3811 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 351:
-#line 3804 "Gmsh.y"
+#line 3815 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8383,7 +8445,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3812 "Gmsh.y"
+#line 3823 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8394,14 +8456,14 @@ yyreduce:
     break;
 
   case 353:
-#line 3823 "Gmsh.y"
+#line 3834 "Gmsh.y"
     { 
       (yyval.l) = (yyvsp[(1) - (1)].l); 
     ;}
     break;
 
   case 354:
-#line 3827 "Gmsh.y"
+#line 3838 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -8413,7 +8475,7 @@ yyreduce:
     break;
 
   case 355:
-#line 3839 "Gmsh.y"
+#line 3850 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8424,7 +8486,7 @@ yyreduce:
     break;
 
   case 356:
-#line 3847 "Gmsh.y"
+#line 3858 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8435,7 +8497,7 @@ yyreduce:
     break;
 
   case 357:
-#line 3855 "Gmsh.y"
+#line 3866 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d)); 
@@ -8445,7 +8507,7 @@ yyreduce:
     break;
 
   case 358:
-#line 3862 "Gmsh.y"
+#line 3873 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -8459,7 +8521,7 @@ yyreduce:
     break;
 
   case 359:
-#line 3873 "Gmsh.y"
+#line 3884 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -8482,7 +8544,7 @@ yyreduce:
     break;
 
   case 360:
-#line 3893 "Gmsh.y"
+#line 3904 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -8495,7 +8557,7 @@ yyreduce:
     break;
 
   case 361:
-#line 3903 "Gmsh.y"
+#line 3914 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -8508,7 +8570,7 @@ yyreduce:
     break;
 
   case 362:
-#line 3913 "Gmsh.y"
+#line 3924 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -8521,7 +8583,7 @@ yyreduce:
     break;
 
   case 363:
-#line 3923 "Gmsh.y"
+#line 3934 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -8541,7 +8603,7 @@ yyreduce:
     break;
 
   case 364:
-#line 3943 "Gmsh.y"
+#line 3954 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8549,21 +8611,21 @@ yyreduce:
     break;
 
   case 365:
-#line 3948 "Gmsh.y"
+#line 3959 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 366:
-#line 3952 "Gmsh.y"
+#line 3963 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 367:
-#line 3956 "Gmsh.y"
+#line 3967 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -8575,21 +8637,21 @@ yyreduce:
     break;
 
   case 368:
-#line 3968 "Gmsh.y"
+#line 3979 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 369:
-#line 3972 "Gmsh.y"
+#line 3983 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 370:
-#line 3984 "Gmsh.y"
+#line 3995 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -8599,7 +8661,7 @@ yyreduce:
     break;
 
   case 371:
-#line 3991 "Gmsh.y"
+#line 4002 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -8609,14 +8671,14 @@ yyreduce:
     break;
 
   case 372:
-#line 4001 "Gmsh.y"
+#line 4012 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 373:
-#line 4005 "Gmsh.y"
+#line 4016 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -8631,7 +8693,7 @@ yyreduce:
     break;
 
   case 374:
-#line 4020 "Gmsh.y"
+#line 4031 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -8639,21 +8701,21 @@ yyreduce:
     break;
 
   case 375:
-#line 4025 "Gmsh.y"
+#line 4036 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 376:
-#line 4032 "Gmsh.y"
+#line 4043 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 377:
-#line 4036 "Gmsh.y"
+#line 4047 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8669,7 +8731,7 @@ yyreduce:
     break;
 
   case 378:
-#line 4049 "Gmsh.y"
+#line 4060 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -8680,7 +8742,7 @@ yyreduce:
     break;
 
   case 379:
-#line 4057 "Gmsh.y"
+#line 4068 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -8691,14 +8753,14 @@ yyreduce:
     break;
 
   case 380:
-#line 4068 "Gmsh.y"
+#line 4079 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 381:
-#line 4072 "Gmsh.y"
+#line 4083 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -8709,7 +8771,7 @@ yyreduce:
     break;
 
   case 382:
-#line 4080 "Gmsh.y"
+#line 4091 "Gmsh.y"
     { 
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -8720,7 +8782,7 @@ yyreduce:
     break;
 
   case 383:
-#line 4088 "Gmsh.y"
+#line 4099 "Gmsh.y"
     { 
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -8731,7 +8793,7 @@ yyreduce:
     break;
 
   case 384:
-#line 4096 "Gmsh.y"
+#line 4107 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -8742,7 +8804,7 @@ yyreduce:
     break;
 
   case 385:
-#line 4104 "Gmsh.y"
+#line 4115 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8759,7 +8821,7 @@ yyreduce:
     break;
 
   case 386:
-#line 4118 "Gmsh.y"
+#line 4129 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8776,14 +8838,14 @@ yyreduce:
     break;
 
   case 387:
-#line 4132 "Gmsh.y"
+#line 4143 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 388:
-#line 4136 "Gmsh.y"
+#line 4147 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -8806,7 +8868,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 8810 "Gmsh.tab.cpp"
+#line 8872 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -9020,7 +9082,7 @@ yyreturn:
 }
 
 
-#line 4156 "Gmsh.y"
+#line 4167 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 6cc10169abdd3801936389f8d1af4b43515a2b87..5eec7e2ad108b7a30214c0786a793d349a905463 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -3248,30 +3248,41 @@ Periodic :
       List_Delete($3);
       List_Delete($5);
     }
-  | tPeriodic tSurface ListOfDouble tAFFECT ListOfDouble tEND
-    {
-      if (List_Nbr($3) != List_Nbr($5)){
-	yymsg(0, "Periodic Surface : the number of masters (%d) is not equal to the number of slaves(%d)", List_Nbr($3),List_Nbr($5));
-      }
-
-      for(int i = 0; i < List_Nbr($3); i++){
-	double d_master,d_slave;
-	List_Read($3, i, &d_master);
-	List_Read($5, i, &d_slave);
-	int j_master = (int)d_master;
-	int j_slave  = (int)d_slave;
-	Surface *s_slave = FindSurface(abs(j_slave));
-	if(s_slave){
-	  s_slave->meshMaster = j_master;
+  | tPeriodic tSurface FExpr ListOfDouble tAFFECT FExpr ListOfDouble tEND
+    {
+      if (List_Nbr($4) != List_Nbr($7)){
+	yymsg(0, "Periodic Surface : the number of masters (%d) is not equal to the number of slaves(%d)", List_Nbr($4),List_Nbr($7));
+      }
+
+      double d_master = $3 ,d_slave = $6;
+      int j_master = (int)d_master;
+      int j_slave  = (int)d_slave;
+      Surface *s_slave = FindSurface(abs(j_slave));
+      if(s_slave){
+	s_slave->meshMaster = j_master;
+	for (int i=0;i<List_Nbr($4);i++){
+	  double dm,ds;
+	  List_Read($4,i,&dm);
+	  List_Read($7,i,&ds);	  
+	  s_slave->edgeCounterparts[(int)ds] = (int)dm;
 	}
-	else{
-	  GFace *gf = GModel::current()->getFaceByTag(abs(j_slave));
-	  if(gf) gf->setMeshMaster (j_master);
-	  else yymsg(0, "Unknown line %d", j_slave);
+      }
+      else{
+	GFace *gf = GModel::current()->getFaceByTag(abs(j_slave));
+	if(gf) gf->setMeshMaster (j_master);
+	else yymsg(0, "Unknown surface %d", j_slave);
+
+	for (int i=0;i<List_Nbr($4);i++){
+	  double dm,ds;
+	  List_Read($4,i,&dm);
+	  List_Read($7,i,&ds);
+	  gf->edgeCounterparts[(int)ds] = (int)dm;
 	}
+
       }
-      List_Delete($3);
-      List_Delete($5);
+
+      List_Delete($4);
+      List_Delete($7);
     }
 ;
 
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index c3a05213f45e925a001e0cd1e266f16167f20dc3..e58187ab7f566bf380e5350af6aedcf4ce881c3a 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -6,29 +6,10 @@
 
 /* A lexical scanner generated by flex */
 
-#define yy_create_buffer gmsh_yy_create_buffer
-#define yy_delete_buffer gmsh_yy_delete_buffer
-#define yy_flex_debug gmsh_yy_flex_debug
-#define yy_init_buffer gmsh_yy_init_buffer
-#define yy_flush_buffer gmsh_yy_flush_buffer
-#define yy_load_buffer_state gmsh_yy_load_buffer_state
-#define yy_switch_to_buffer gmsh_yy_switch_to_buffer
-#define yyin gmsh_yyin
-#define yyleng gmsh_yyleng
-#define yylex gmsh_yylex
-#define yylineno gmsh_yylineno
-#define yyout gmsh_yyout
-#define yyrestart gmsh_yyrestart
-#define yytext gmsh_yytext
-#define yywrap gmsh_yywrap
-#define yyalloc gmsh_yyalloc
-#define yyrealloc gmsh_yyrealloc
-#define yyfree gmsh_yyfree
-
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
+#define YY_FLEX_SUBMINOR_VERSION 33
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -50,7 +31,7 @@
 
 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
 
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#if __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
  * if you want the limit (max/min) macros for int types. 
@@ -113,12 +94,11 @@ typedef unsigned int flex_uint32_t;
 
 #else	/* ! __cplusplus */
 
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
+#if __STDC__
 
 #define YY_USE_CONST
 
-#endif	/* defined (__STDC__) */
+#endif	/* __STDC__ */
 #endif	/* ! __cplusplus */
 
 #ifdef YY_USE_CONST
@@ -172,12 +152,7 @@ typedef unsigned int flex_uint32_t;
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-extern yy_size_t gmsh_yyleng;
+extern int gmsh_yyleng;
 
 extern FILE *gmsh_yyin, *gmsh_yyout;
 
@@ -203,6 +178,16 @@ extern FILE *gmsh_yyin, *gmsh_yyout;
 
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef unsigned int yy_size_t;
+#endif
+
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -220,7 +205,7 @@ struct yy_buffer_state
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -290,8 +275,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when gmsh_yytext is formed. */
 static char yy_hold_char;
-static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
-yy_size_t gmsh_yyleng;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int gmsh_yyleng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
@@ -319,7 +304,7 @@ static void gmsh_yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE gmsh_yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE gmsh_yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE gmsh_yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+YY_BUFFER_STATE gmsh_yy_scan_bytes (yyconst char *bytes,int len  );
 
 void *gmsh_yyalloc (yy_size_t  );
 void *gmsh_yyrealloc (void *,yy_size_t  );
@@ -910,7 +895,7 @@ void   skipline(void);
 #define YY_NO_UNISTD_H
 #endif
 
-#line 914 "Gmsh.yy.cpp"
+#line 899 "Gmsh.yy.cpp"
 
 #define INITIAL 0
 
@@ -928,35 +913,6 @@ void   skipline(void);
 
 static int yy_init_globals (void );
 
-/* Accessor methods to globals.
-   These are made visible to non-reentrant scanners for convenience. */
-
-int gmsh_yylex_destroy (void );
-
-int gmsh_yyget_debug (void );
-
-void gmsh_yyset_debug (int debug_flag  );
-
-YY_EXTRA_TYPE gmsh_yyget_extra (void );
-
-void gmsh_yyset_extra (YY_EXTRA_TYPE user_defined  );
-
-FILE *gmsh_yyget_in (void );
-
-void gmsh_yyset_in  (FILE * in_str  );
-
-FILE *gmsh_yyget_out (void );
-
-void gmsh_yyset_out  (FILE * out_str  );
-
-yy_size_t gmsh_yyget_leng (void );
-
-char *gmsh_yyget_text (void );
-
-int gmsh_yyget_lineno (void );
-
-void gmsh_yyset_lineno (int line_number  );
-
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -999,7 +955,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )
+#define ECHO (void) fwrite( gmsh_yytext, gmsh_yyleng, 1, gmsh_yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1010,7 +966,7 @@ static int input (void );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		yy_size_t n; \
+		size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( gmsh_yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1095,7 +1051,7 @@ YY_DECL
 #line 49 "Gmsh.l"
 
 
-#line 1099 "Gmsh.yy.cpp"
+#line 1055 "Gmsh.yy.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1935,7 +1891,7 @@ YY_RULE_SETUP
 #line 227 "Gmsh.l"
 ECHO;
 	YY_BREAK
-#line 1939 "Gmsh.yy.cpp"
+#line 1895 "Gmsh.yy.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2121,7 +2077,7 @@ static int yy_get_next_buffer (void)
 
 	else
 		{
-			yy_size_t num_to_read =
+			int num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -2135,7 +2091,7 @@ static int yy_get_next_buffer (void)
 
 			if ( b->yy_is_our_buffer )
 				{
-				yy_size_t new_size = b->yy_buf_size * 2;
+				int new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2190,14 +2146,6 @@ static int yy_get_next_buffer (void)
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) gmsh_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
 	(yy_n_chars) += number_to_move;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
 	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
@@ -2276,7 +2224,7 @@ static int yy_get_next_buffer (void)
 	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
 		{ /* need to shift things up to make room */
 		/* +2 for EOB chars. */
-		register yy_size_t number_to_move = (yy_n_chars) + 2;
+		register int number_to_move = (yy_n_chars) + 2;
 		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
 					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
 		register char *source =
@@ -2325,7 +2273,7 @@ static int yy_get_next_buffer (void)
 
 		else
 			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			int offset = (yy_c_buf_p) - (yytext_ptr);
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -2601,7 +2549,7 @@ void gmsh_yypop_buffer_state (void)
  */
 static void gmsh_yyensure_buffer_stack (void)
 {
-	yy_size_t num_to_alloc;
+	int num_to_alloc;
     
 	if (!(yy_buffer_stack)) {
 
@@ -2613,9 +2561,7 @@ static void gmsh_yyensure_buffer_stack (void)
 		(yy_buffer_stack) = (struct yy_buffer_state**)gmsh_yyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in gmsh_yyensure_buffer_stack()" );
-								  
+		
 		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
 				
 		(yy_buffer_stack_max) = num_to_alloc;
@@ -2633,8 +2579,6 @@ static void gmsh_yyensure_buffer_stack (void)
 								((yy_buffer_stack),
 								num_to_alloc * sizeof(struct yy_buffer_state*)
 								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in gmsh_yyensure_buffer_stack()" );
 
 		/* zero only the new slots.*/
 		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -2679,7 +2623,7 @@ YY_BUFFER_STATE gmsh_yy_scan_buffer  (char * base, yy_size_t  size )
 
 /** Setup the input buffer state to scan a string. The next call to gmsh_yylex() will
  * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
+ * @param str a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
@@ -2698,11 +2642,12 @@ YY_BUFFER_STATE gmsh_yy_scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE gmsh_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE gmsh_yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
-	yy_size_t n, i;
+	yy_size_t n;
+	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
 	n = _yybytes_len + 2;
@@ -2784,7 +2729,7 @@ FILE *gmsh_yyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-yy_size_t gmsh_yyget_leng  (void)
+int gmsh_yyget_leng  (void)
 {
         return gmsh_yyleng;
 }
diff --git a/Solver/elasticityTerm.cpp b/Solver/elasticityTerm.cpp
index 09421294bba56d4145b23afd4faf5bd9e206142c..77a0c4dcca8492438a0e7357dc9c841e7236eb19 100644
--- a/Solver/elasticityTerm.cpp
+++ b/Solver/elasticityTerm.cpp
@@ -28,6 +28,12 @@ void elasticityTerm::elementMatrix(SElement *se, fullMatrix<double> &m) const
   double C11 = FACT * (1 - _nu) / (1 - 2 * _nu);
   double C12 = FACT * _nu / (1 - 2 * _nu);
   double C44 = (C11 - C12) / 2;
+  // FIXME : PLANE STRESS !!! 
+  FACT = _E / (1-_nu*_nu); 
+  C11  = FACT; 
+  C12  = _nu * FACT; 
+  C44 = (1.-_nu)*.5*FACT;
+  
   const double C[6][6] =
     { {C11, C12, C12,    0,   0,   0},
       {C12, C11, C12,    0,   0,   0},
@@ -57,10 +63,8 @@ void elasticityTerm::elementMatrix(SElement *se, fullMatrix<double> &m) const
     BT.setAll(0.);
 
     if (se->getShapeEnrichement() == se->getTestEnrichement()){
+      //      printf("coucou\n");
       for (int j = 0; j < nbNodes; j++){
-
-//        printf(" GR(j) = %12.5E,%12.5E,%12.5E\n", Grads[j][0],Grads[j][1],Grads[j][2]);
-
         BT(j, 0) = B(0, j) = Grads[j][0];
         BT(j, 3) = B(3, j) = Grads[j][1];
         BT(j, 5) = B(5, j) = Grads[j][2];
@@ -72,7 +76,6 @@ void elasticityTerm::elementMatrix(SElement *se, fullMatrix<double> &m) const
         BT(j + 2 * nbNodes, 2) = B(2, j + 2 * nbNodes) = Grads[j][2];
         BT(j + 2 * nbNodes, 4) = B(4, j + 2 * nbNodes) = Grads[j][1];
         BT(j + 2 * nbNodes, 5) = B(5, j + 2 * nbNodes) = Grads[j][0];
-       // JF mon cochon si tu savais le nombre de bugs qu'il y avait ici... 
       }
     }
     else{
diff --git a/Solver/terms.h b/Solver/terms.h
index 98d6e7379d24d9ff616efaee78cdae187d413097..7d52068f315e60e99ea9bc7b5920342848d53187 100644
--- a/Solver/terms.h
+++ b/Solver/terms.h
@@ -193,6 +193,11 @@ class IsotropicElasticTerm : public BilinearTerm<SVector3,SVector3>
     double C11 = FACT * (1 - nu) / (1 - 2 * nu);
     double C12 = FACT * nu / (1 - 2 * nu);
     double C44 = (C11 - C12) / 2;
+    FACT = E / (1-nu*nu); 
+    C11  = FACT; 
+    C12  = nu * FACT; 
+    C44 = (1.-nu)*.5*FACT;
+    
     H.scale(0.);
     for (int i=0;i<3;++i) {H(i,i)=C11;H(i+3,i+3)=C44;}
     H(1,0)=H(0,1)=H(2,0)=H(0,2)=H(1,2)=H(2,1)=C12;
diff --git a/benchmarks/3d/CubePeriodic.geo b/benchmarks/3d/CubePeriodic.geo
new file mode 100644
index 0000000000000000000000000000000000000000..fddfcbfa4a0dda49a51f9ba68bc4298d4cdfb7f8
--- /dev/null
+++ b/benchmarks/3d/CubePeriodic.geo
@@ -0,0 +1,67 @@
+lc = 0.2;
+//ep=0.35;
+ep=2.2;
+eh=ep/4;
+em=ep-eh;
+it=600;
+diff=0.0;
+Point(1) = {0, 0, 0, lc};
+Point(2) = {2.2, 0, 0, lc};
+Point(3) = {2.2, 2.2, 0, lc};
+Point(4) = {0, 2.2, 0, lc};
+Point(5) = {0, 0, ep, lc};
+Point(6) = {2.2, 0, ep, lc};
+Point(7) = {2.2, 2.2, ep, lc};
+Point(8) = {0, 2.2, ep, lc};
+Line (1) = {5, 6};
+Line (2) = {6, 2};
+Line (3) = {2, 1};
+Line (4) = {1, 5};
+Line (5) = {8, 7};
+Line (6) = {7, 3};
+Line (7) = {3, 4};
+Line (8) = {4, 8};
+Line (9) = {5, 8};
+Line (10) = {6, 7};
+Line (11) = {2, 3};
+Line (12) = {1, 4};
+Line Loop (1000014) = {5, -10, -1, 9};
+Plane Surface (14) = {1000014};
+Line Loop (1000016) = {8, 5, 6, 7};
+Plane Surface (16) = {1000016};
+Line Loop (1000018) = {4, 9, -8, -12};
+Plane Surface (18) = {1000018};
+Line Loop (1000020) = {2, 11, -6, -10};
+Plane Surface (20) = {1000020};
+Line Loop (1000022) = {3, 12, -7, -11};
+Plane Surface (22) = {1000022};
+Line Loop (1000024) = {4, 1, 2, 3};
+Plane Surface (24) = {1000024};
+Surface Loop (1000026) = {14, 16, 18, 24, 20, 22};
+Volume (26) = {1000026};
+
+Physical Volume(1)={26};
+Physical Surface(10)={14:24:2};
+/*
+Periodic Line {1} = {5};
+Periodic Line {3} = {7};
+Periodic Line {9} = {10};
+Periodic Line {12} = {11};
+*/
+Periodic Line {4} = {2} ;
+Periodic Line {4} = {6} ;
+Periodic Line {4} = {8} ;
+
+Periodic Line {1} = {5} ;
+Periodic Line {1} = {7} ;
+Periodic Line {1} = {3} ;
+
+Periodic Line {9} = {10} ;
+Periodic Line {9} = {11} ;
+Periodic Line {9} = {12} ;
+
+Periodic Surface 24 {1,2,3,4} = 16 {5,6,7,8};
+Periodic Surface 14 {10,5,9,1} = 22 {11,-7,12,-3};
+Periodic Surface 18 {9,8,12,4} = 20 {10,-6,11,-2};
+//Periodic Surface {14} = {22};
+//Periodic Surface {18} = {20};