diff --git a/Frontend Angular 4/package-lock.json b/Frontend Angular 4/package-lock.json
index 2d820980cca3160b760ce399bb922d423ca3192c..7d1db213c7168a154cef18dfcd8260e4696210b6 100644
--- a/Frontend Angular 4/package-lock.json	
+++ b/Frontend Angular 4/package-lock.json	
@@ -490,6 +490,11 @@
       "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
       "dev": true
     },
+    "array-range": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz",
+      "integrity": "sha1-9W5GWRhDYRxqVvd+8C7afFAIm/w="
+    },
     "array-slice": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
@@ -1178,6 +1183,14 @@
       "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
       "dev": true
     },
+    "built-in-math-eval": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/built-in-math-eval/-/built-in-math-eval-0.3.0.tgz",
+      "integrity": "sha1-JA3CHLOJQ5WIxhxGDrAHZJfvxBw=",
+      "requires": {
+        "math-codegen": "^0.3.5"
+      }
+    },
     "builtin-modules": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
@@ -1373,6 +1386,11 @@
       "integrity": "sha1-m2hpLjWw41EJmNAWS2rlARvqV2A=",
       "dev": true
     },
+    "clamp": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
+      "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ="
+    },
     "clap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
@@ -1630,8 +1648,7 @@
     "commander": {
       "version": "2.16.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
-      "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
-      "dev": true
+      "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew=="
     },
     "common-tags": {
       "version": "1.8.0",
@@ -2100,6 +2117,261 @@
       "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
       "dev": true
     },
+    "d3": {
+      "version": "4.13.0",
+      "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz",
+      "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==",
+      "requires": {
+        "d3-array": "1.2.1",
+        "d3-axis": "1.0.8",
+        "d3-brush": "1.0.4",
+        "d3-chord": "1.0.4",
+        "d3-collection": "1.0.4",
+        "d3-color": "1.0.3",
+        "d3-dispatch": "1.0.3",
+        "d3-drag": "1.2.1",
+        "d3-dsv": "1.0.8",
+        "d3-ease": "1.0.3",
+        "d3-force": "1.1.0",
+        "d3-format": "1.2.2",
+        "d3-geo": "1.9.1",
+        "d3-hierarchy": "1.1.5",
+        "d3-interpolate": "1.1.6",
+        "d3-path": "1.0.5",
+        "d3-polygon": "1.0.3",
+        "d3-quadtree": "1.0.3",
+        "d3-queue": "3.0.7",
+        "d3-random": "1.1.0",
+        "d3-request": "1.0.6",
+        "d3-scale": "1.0.7",
+        "d3-selection": "1.3.0",
+        "d3-shape": "1.2.0",
+        "d3-time": "1.0.8",
+        "d3-time-format": "2.1.1",
+        "d3-timer": "1.0.7",
+        "d3-transition": "1.1.1",
+        "d3-voronoi": "1.1.2",
+        "d3-zoom": "1.7.1"
+      }
+    },
+    "d3-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz",
+      "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw=="
+    },
+    "d3-axis": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz",
+      "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo="
+    },
+    "d3-brush": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz",
+      "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=",
+      "requires": {
+        "d3-dispatch": "1",
+        "d3-drag": "1",
+        "d3-interpolate": "1",
+        "d3-selection": "1",
+        "d3-transition": "1"
+      }
+    },
+    "d3-chord": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz",
+      "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=",
+      "requires": {
+        "d3-array": "1",
+        "d3-path": "1"
+      }
+    },
+    "d3-collection": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz",
+      "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI="
+    },
+    "d3-color": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz",
+      "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs="
+    },
+    "d3-dispatch": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz",
+      "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg="
+    },
+    "d3-drag": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz",
+      "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==",
+      "requires": {
+        "d3-dispatch": "1",
+        "d3-selection": "1"
+      }
+    },
+    "d3-dsv": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz",
+      "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==",
+      "requires": {
+        "commander": "2",
+        "iconv-lite": "0.4",
+        "rw": "1"
+      }
+    },
+    "d3-ease": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz",
+      "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4="
+    },
+    "d3-force": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz",
+      "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==",
+      "requires": {
+        "d3-collection": "1",
+        "d3-dispatch": "1",
+        "d3-quadtree": "1",
+        "d3-timer": "1"
+      }
+    },
+    "d3-format": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz",
+      "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw=="
+    },
+    "d3-geo": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz",
+      "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==",
+      "requires": {
+        "d3-array": "1"
+      }
+    },
+    "d3-hierarchy": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz",
+      "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY="
+    },
+    "d3-interpolate": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz",
+      "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==",
+      "requires": {
+        "d3-color": "1"
+      }
+    },
+    "d3-path": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz",
+      "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q="
+    },
+    "d3-polygon": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz",
+      "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI="
+    },
+    "d3-quadtree": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz",
+      "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg="
+    },
+    "d3-queue": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz",
+      "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg="
+    },
+    "d3-random": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz",
+      "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM="
+    },
+    "d3-request": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz",
+      "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==",
+      "requires": {
+        "d3-collection": "1",
+        "d3-dispatch": "1",
+        "d3-dsv": "1",
+        "xmlhttprequest": "1"
+      }
+    },
+    "d3-scale": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz",
+      "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==",
+      "requires": {
+        "d3-array": "^1.2.0",
+        "d3-collection": "1",
+        "d3-color": "1",
+        "d3-format": "1",
+        "d3-interpolate": "1",
+        "d3-time": "1",
+        "d3-time-format": "2"
+      }
+    },
+    "d3-selection": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz",
+      "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA=="
+    },
+    "d3-shape": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz",
+      "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=",
+      "requires": {
+        "d3-path": "1"
+      }
+    },
+    "d3-time": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz",
+      "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ=="
+    },
+    "d3-time-format": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz",
+      "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==",
+      "requires": {
+        "d3-time": "1"
+      }
+    },
+    "d3-timer": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz",
+      "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA=="
+    },
+    "d3-transition": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz",
+      "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==",
+      "requires": {
+        "d3-color": "1",
+        "d3-dispatch": "1",
+        "d3-ease": "1",
+        "d3-interpolate": "1",
+        "d3-selection": "^1.1.0",
+        "d3-timer": "1"
+      }
+    },
+    "d3-voronoi": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz",
+      "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw="
+    },
+    "d3-zoom": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz",
+      "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==",
+      "requires": {
+        "d3-dispatch": "1",
+        "d3-drag": "1",
+        "d3-interpolate": "1",
+        "d3-selection": "1",
+        "d3-transition": "1"
+      }
+    },
     "dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -2138,6 +2410,11 @@
       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
       "dev": true
     },
+    "decimal.js": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-4.0.4.tgz",
+      "integrity": "sha1-rzJJRl4TOYjDB1D3fqr0RQXKpeM="
+    },
     "decode-uri-component": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -2436,6 +2713,11 @@
         "is-obj": "^1.0.0"
       }
     },
+    "double-bits": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/double-bits/-/double-bits-1.1.1.tgz",
+      "integrity": "sha1-WKu6RUlNpND6Nrc60RoobJGEscY="
+    },
     "duplexer3": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
@@ -2948,8 +3230,7 @@
     "extend": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
-      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
-      "dev": true
+      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
     },
     "extend-shallow": {
       "version": "3.0.2",
@@ -3857,6 +4138,24 @@
       "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
       "dev": true
     },
+    "function-plot": {
+      "version": "git+https://github.com/diego-rey/function-plot.git#8e0045a0abcfc93662df118da951a056812141dc",
+      "from": "git+https://github.com/diego-rey/function-plot.git#feature/shape-type",
+      "requires": {
+        "array-range": "^1.0.1",
+        "built-in-math-eval": "^0.3.0",
+        "clamp": "^1.0.1",
+        "extend": "^3.0.0",
+        "integrate-adaptive-simpson": "^1.0.3",
+        "interval-arithmetic-eval": "^0.4.6",
+        "is-object": "^1.0.1",
+        "key-pressed": "0.0.1",
+        "keydown": "0.0.3",
+        "linspace": "0.0.1-1",
+        "log10": "^1.0.0",
+        "logspace": "0.0.0"
+      }
+    },
     "gauge": {
       "version": "2.7.4",
       "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
@@ -4654,7 +4953,6 @@
       "version": "0.4.23",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
       "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
-      "dev": true,
       "requires": {
         "safer-buffer": ">= 2.1.2 < 3"
       }
@@ -4838,12 +5136,42 @@
         }
       }
     },
+    "integers": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/integers/-/integers-0.0.0.tgz",
+      "integrity": "sha1-jzRtedoaxW2NRNzy2FgsRFuR1bk="
+    },
+    "integrate-adaptive-simpson": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/integrate-adaptive-simpson/-/integrate-adaptive-simpson-1.1.1.tgz",
+      "integrity": "sha1-gWHL77UOQw0U/RVIlXUJK6sdLGk="
+    },
     "interpret": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
       "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
       "dev": true
     },
+    "interval-arithmetic": {
+      "version": "0.6.10",
+      "resolved": "https://registry.npmjs.org/interval-arithmetic/-/interval-arithmetic-0.6.10.tgz",
+      "integrity": "sha512-fnwnv0KgRuhHNoTGga5vPHypW0iypRpRPpejsevskM03uX4/A7Ph1C9IdDMHRyQwppchBNDxmcBWxiHrIc1ktA==",
+      "requires": {
+        "is-safe-integer": "^1.0.1",
+        "nextafter": "^1.0.0",
+        "typedarray": "0.0.6",
+        "xtend": "^4.0.1"
+      }
+    },
+    "interval-arithmetic-eval": {
+      "version": "0.4.6",
+      "resolved": "https://registry.npmjs.org/interval-arithmetic-eval/-/interval-arithmetic-eval-0.4.6.tgz",
+      "integrity": "sha1-fhRkA8PIHLE4v9pnyQKMc+vtyPk=",
+      "requires": {
+        "interval-arithmetic": "^0.6.6",
+        "math-codegen": "^0.3.5"
+      }
+    },
     "invariant": {
       "version": "2.2.4",
       "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -5011,7 +5339,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
       "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
-      "dev": true,
       "requires": {
         "number-is-nan": "^1.0.0"
       }
@@ -5073,6 +5400,11 @@
       "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
       "dev": true
     },
+    "is-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+      "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
+    },
     "is-path-cwd": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
@@ -5142,6 +5474,14 @@
       "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
       "dev": true
     },
+    "is-safe-integer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-safe-integer/-/is-safe-integer-1.0.2.tgz",
+      "integrity": "sha1-yi3gJR9WRAj512MMKOLgLOGOoKo=",
+      "requires": {
+        "max-safe-integer": "^1.0.0"
+      }
+    },
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -5837,6 +6177,22 @@
         "source-map-support": "^0.5.5"
       }
     },
+    "key-pressed": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/key-pressed/-/key-pressed-0.0.1.tgz",
+      "integrity": "sha1-1oL7THwQQpKaW8iGNnKMpxIg3rs=",
+      "requires": {
+        "vkey": "0.0.3"
+      }
+    },
+    "keydown": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/keydown/-/keydown-0.0.3.tgz",
+      "integrity": "sha1-4gaa0FEJjLOebbPL6Af7imggWAc=",
+      "requires": {
+        "vkey": "~0.0.3"
+      }
+    },
     "kind-of": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@@ -5911,6 +6267,14 @@
         "object-assign": "^4.1.0"
       }
     },
+    "linspace": {
+      "version": "0.0.1-1",
+      "resolved": "https://registry.npmjs.org/linspace/-/linspace-0.0.1-1.tgz",
+      "integrity": "sha1-7N7wWwP0frGSOmEb3HdFvDionho=",
+      "requires": {
+        "integers": "0.0.0"
+      }
+    },
     "load-json-file": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
@@ -6005,6 +6369,14 @@
       "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
       "dev": true
     },
+    "log10": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/log10/-/log10-1.0.1.tgz",
+      "integrity": "sha1-sPxkZXxu+8mTSQ7aqn0w5qUgu+c=",
+      "requires": {
+        "is-finite": "^1.0.1"
+      }
+    },
     "log4js": {
       "version": "0.6.38",
       "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
@@ -6023,6 +6395,14 @@
         }
       }
     },
+    "logspace": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/logspace/-/logspace-0.0.0.tgz",
+      "integrity": "sha1-DIUnGrsJJFxQXWPxocETyhVbHnQ=",
+      "requires": {
+        "linspace": "0.0.1-1"
+      }
+    },
     "longest": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -6125,6 +6505,15 @@
         "minimatch": "^3.0.2"
       }
     },
+    "math-codegen": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/math-codegen/-/math-codegen-0.3.5.tgz",
+      "integrity": "sha1-R5nuRnfe0Ud2bQA8ykt4ee3UDMo=",
+      "requires": {
+        "extend": "^3.0.0",
+        "mr-parser": "^0.2.1"
+      }
+    },
     "math-expression-evaluator": {
       "version": "1.2.17",
       "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
@@ -6137,6 +6526,19 @@
       "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
       "dev": true
     },
+    "mathjs": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-1.6.0.tgz",
+      "integrity": "sha1-3cfv/nk1qfMHCkEXET+g7GE66RE=",
+      "requires": {
+        "decimal.js": "~4.0.1"
+      }
+    },
+    "max-safe-integer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz",
+      "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA="
+    },
     "md5.js": {
       "version": "1.3.4",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
@@ -6368,6 +6770,11 @@
         "minimist": "0.0.8"
       }
     },
+    "mr-parser": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/mr-parser/-/mr-parser-0.2.1.tgz",
+      "integrity": "sha1-hhi5ukF+KOn0OaQcaVtVTq/u2Sc="
+    },
     "ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -6418,6 +6825,14 @@
       "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==",
       "dev": true
     },
+    "nextafter": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/nextafter/-/nextafter-1.0.0.tgz",
+      "integrity": "sha1-t9d7U1MQ4+CX5gJauwqQNHfsGjo=",
+      "requires": {
+        "double-bits": "^1.1.0"
+      }
+    },
     "ng2-bootstrap-modal": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/ng2-bootstrap-modal/-/ng2-bootstrap-modal-1.0.1.tgz",
@@ -6815,8 +7230,7 @@
     "number-is-nan": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "dev": true
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
     },
     "oauth-sign": {
       "version": "0.8.2",
@@ -8636,6 +9050,11 @@
         "is-promise": "^2.1.0"
       }
     },
+    "rw": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+      "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
+    },
     "rx-lite": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
@@ -8677,8 +9096,7 @@
     "safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "sass-graph": {
       "version": "2.2.4",
@@ -10211,6 +10629,11 @@
         "mime-types": "~2.1.18"
       }
     },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+    },
     "typescript": {
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.2.2.tgz",
@@ -10567,6 +10990,11 @@
         }
       }
     },
+    "vkey": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/vkey/-/vkey-0.0.3.tgz",
+      "integrity": "sha1-Y03XlS6ywRUxvxhZ8ObUGUeAM98="
+    },
     "vlq": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
@@ -11289,6 +11717,11 @@
       "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
       "dev": true
     },
+    "xmlhttprequest": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+    },
     "xmlhttprequest-ssl": {
       "version": "1.5.3",
       "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
@@ -11298,8 +11731,7 @@
     "xtend": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
-      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
-      "dev": true
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
     },
     "y18n": {
       "version": "3.2.1",
diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.component.html b/Frontend Angular 4/src/app/layout/matefun/matefun.component.html
index 114b1f3e170818d8472dfadb564fd08226864ec8..da86c723ac0d2140e88195b52ad1ee883cc7bb58 100755
--- a/Frontend Angular 4/src/app/layout/matefun/matefun.component.html	
+++ b/Frontend Angular 4/src/app/layout/matefun/matefun.component.html	
@@ -74,22 +74,22 @@
 
             </ng-template>
                 </ngb-tab>
-                <ngb-tab id="FigurasBtn" title="Figuras">
+                <ngb-tab id="FigurasBtn" title="Figuras OLD">
                     <ng-template ngbTabContent>
                         <canvas-component (canvasComp)=canvasC></canvas-component>
                     </ng-template>
-               </ngb-tab>
-                <ngb-tab id="FigurasBtn2" title="Figuras 3D">
+                </ngb-tab>
+                <ngb-tab id="FigurasBtn2" title="Figuras 2D">
                     <ng-template ngbTabContent>
-                        <graph3d-component (graph3DComp)=graph3DComp></graph3d-component>
+                        <graph2D-component (graph2DComp)=graph2DComp></graph2D-component>
                     </ng-template>
                 </ngb-tab>
-
-                <ngb-tab id="FigurasBtn2" title="Figuras New">
+                <ngb-tab id="FigurasBtn3" title="Figuras 3D">
                     <ng-template ngbTabContent>
-                        <plotter-component (plotterComp)=plotterC></plotter-component>
+                        <graph3d-component (graph3DComp)=graph3DComp></graph3d-component>
                     </ng-template>
                 </ngb-tab>
+
             </ngb-tabset> 
 
         </div>
diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts
index a9494a7db869d644fef65d44d513d77e32800e62..ac12c4a9e3fb1d881e30409af5e08edd6ebdcadd 100755
--- a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts	
+++ b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts	
@@ -1,8 +1,6 @@
 import { Component, NgModule, ViewChild, HostListener, ElementRef, ComponentRef, TemplateRef } from '@angular/core';
 import { CanvasModule} from '../canvas/canvas.module';
 import { CanvasComponent } from '../canvas/canvas.component';
-import { PlotterModule } from '../plotter/plotter.module';
-import { PlotterComponent } from '../plotter/plotter.component';
 import { Http, JsonpModule } from '@angular/http';
 import { Headers, RequestOptions } from '@angular/http';
 import { HaskellService } from '../../shared/services/haskell.service';
@@ -21,6 +19,8 @@ import { CodemirrorComponent } from 'ng2-codemirror';
 import { NgbPopoverConfig, NgbPopover} from '@ng-bootstrap/ng-bootstrap';
 import { NgbPopoverWindow } from '@ng-bootstrap/ng-bootstrap/popover/popover';
 import { NotificacionService } from '../../shared/services/notificacion.service';
+import { Graph2DModule } from '../plotter/graph2D/graph2D.module';
+import { Graph2DComponent } from '../plotter/graph2D/graph2D.component';
 import { Graph3DComponent } from '../plotter/graph3D/graph3D.component';
 
 import 'rxjs/add/operator/catch';
@@ -356,7 +356,7 @@ export class MateFunComponent {
     @ViewChild(CanvasComponent) canvasC: CanvasComponent;
     @ViewChild(Graph3DComponent) graph3DComp: Graph3DComponent;
 
-    @ViewChild(PlotterComponent) plotterC: PlotterComponent;
+    @ViewChild(Graph2DComponent) graph2DComp: Graph2DComponent;
 
     funcionSTR: string = 'Math.sin(x)*x*x-20';
     consola: string = '';
diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.module.ts b/Frontend Angular 4/src/app/layout/matefun/matefun.module.ts
index a021aaca087eaa12fbac4d2f0c6b19b7f58cd9d1..479210f297ed023b2a10a2b55c57e4de48a8f1e7 100755
--- a/Frontend Angular 4/src/app/layout/matefun/matefun.module.ts	
+++ b/Frontend Angular 4/src/app/layout/matefun/matefun.module.ts	
@@ -1,7 +1,6 @@
 import { NgModule } from '@angular/core';
 import { FormsModule } from '@angular/forms';
 import { CanvasModule } from '../canvas/canvas.module'
-import { PlotterModule } from '../plotter/plotter.module'
 import { MateFunComponent } from './matefun.component';
 import { BootstrapModalModule } from 'ng2-bootstrap-modal';
 import { ConfirmComponent } from './confirm.component';
@@ -10,7 +9,8 @@ import { CommonModule } from '@angular/common';
 import { MateFunRoutingModule } from './matefun-routing.module';
 import { CodemirrorModule } from 'ng2-codemirror';
 import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
-import { NotificacionModule } from '../../notificacion/notificacion.module'; 
+import { NotificacionModule } from '../../notificacion/notificacion.module';
+import { Graph2DModule } from '../plotter/graph2D/graph2D.module';
 import { Graph3DModule } from '../plotter/graph3D/graph3D.module';
 
 @NgModule({
@@ -18,7 +18,7 @@ import { Graph3DModule } from '../plotter/graph3D/graph3D.module';
     CommonModule, 
     FormsModule, 
     CanvasModule, 
-    PlotterModule,
+    Graph2DModule,
     Graph3DModule,
     NotificacionModule,
     MateFunRoutingModule,
diff --git a/Frontend Angular 4/src/app/layout/plotter/plotter.component.html b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.html
similarity index 61%
rename from Frontend Angular 4/src/app/layout/plotter/plotter.component.html
rename to Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.html
index f813a5601c8bf1ac2f17dd2dae8be24c158c55c7..fc9a2b5b3800faa7479227368e0a653fade8496e 100755
--- a/Frontend Angular 4/src/app/layout/plotter/plotter.component.html	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.html	
@@ -1,6 +1,6 @@
 <div class="card">
     <div class="card-block contenedor-canvas" >  
-        <div id="plotter-container" style="height: 100%; width: 100%;">
+        <div id="graph2D-container" style="height: 100%; width: 100%;">
         </div>
     </div>
 </div>
\ No newline at end of file
diff --git a/Frontend Angular 4/src/app/layout/plotter/plotter.component.ts b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts
similarity index 91%
rename from Frontend Angular 4/src/app/layout/plotter/plotter.component.ts
rename to Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts
index 38c7d4fea285ff84463c320ee482d9f309cced15..9c7bdf94152cb22fb5390b91937ba375cd9f2965 100755
--- a/Frontend Angular 4/src/app/layout/plotter/plotter.component.ts	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts	
@@ -1,16 +1,16 @@
 import { Component } from '@angular/core';
-import { GHCIService } from '../../shared/services/ghci.service'; 
+import { GHCIService } from '../../../shared/services/ghci.service'; 
 import  functionPlot from 'function-plot';
  
 @Component({
     moduleId: module.id,
-    selector: 'plotter-component',
-    templateUrl: './plotter.component.html',
+    selector: 'graph2D-component',
+    templateUrl: './graph2D.component.html',
     host: {
         
     }
 })
-export class PlotterComponent {
+export class Graph2DComponent {
     public constructor(private ghciService: GHCIService) {
         ghciService.messages.subscribe(
             canvas=>{
@@ -20,7 +20,7 @@ export class PlotterComponent {
 
 
                     functionPlot({
-                        target: '#plotter-container',
+                        target: '#graph2D-container',
                         width: 770,
                         height: 720,
                         tip: {
@@ -44,7 +44,7 @@ export class PlotterComponent {
                       })
 
                     // functionPlot({
-                    //     target: '#plotter-container',
+                    //     target: '#graph2D-container',
                     //     width: 620,
                     //     height: 450,
                     //     data: [{
diff --git a/Frontend Angular 4/src/app/layout/plotter/plotter.module.ts b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.module.ts
similarity index 65%
rename from Frontend Angular 4/src/app/layout/plotter/plotter.module.ts
rename to Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.module.ts
index 4ae25cee7c0f11c64f409e9f05da70a9a8fbf279..0083535d10b24663644361ec9b43cd594ecca823 100755
--- a/Frontend Angular 4/src/app/layout/plotter/plotter.module.ts	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.module.ts	
@@ -3,12 +3,12 @@ import { CommonModule } from '@angular/common'
 import { RouterModule } from '@angular/router';
 import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
 import { FormsModule } from '@angular/forms';
-import { PlotterComponent } from './plotter.component';
+import { Graph2DComponent } from './graph2D.component';
 
 @NgModule({
     imports: [FormsModule, RouterModule, CommonModule, NgbModule],
-    declarations: [PlotterComponent],
-    exports: [PlotterComponent]
+    declarations: [Graph2DComponent],
+    exports: [Graph2DComponent]
 })
 
-export class PlotterModule { }
\ No newline at end of file
+export class Graph2DModule { }
\ No newline at end of file
diff --git a/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.routes.ts b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.routes.ts
new file mode 100755
index 0000000000000000000000000000000000000000..4edd52759a00c4e92012bf0e60f0b73dfc03cf62
--- /dev/null
+++ b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.routes.ts	
@@ -0,0 +1,9 @@
+import { Route } from '@angular/router';
+import { Graph2DComponent } from '.';
+
+export const Graph2DRoutes: Route[] = [
+	{
+		path: 'graph2D',
+		component: Graph2DComponent
+	}
+];
diff --git a/Frontend Angular 4/src/app/layout/plotter/index.ts b/Frontend Angular 4/src/app/layout/plotter/graph2D/index.ts
similarity index 53%
rename from Frontend Angular 4/src/app/layout/plotter/index.ts
rename to Frontend Angular 4/src/app/layout/plotter/graph2D/index.ts
index 86b4caa06fbca8c98995b157a541aa3ef0496473..d4fa29198da6bf92cd27eece0567a5e0e49f724b 100755
--- a/Frontend Angular 4/src/app/layout/plotter/index.ts	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph2D/index.ts	
@@ -1,6 +1,6 @@
 /**
  * This barrel file provides the export for the lazy loaded BlankpageComponent.
  */
-export * from './plotter.component';
+export * from './graph2D.component';
 
-export * from './plotter.routes';
+export * from './graph2D.routes';
diff --git a/Frontend Angular 4/src/app/layout/plotter/plotter.routes.ts b/Frontend Angular 4/src/app/layout/plotter/plotter.routes.ts
deleted file mode 100755
index 489f72a2b381ee6cf697eaf48a714e4df398ae8e..0000000000000000000000000000000000000000
--- a/Frontend Angular 4/src/app/layout/plotter/plotter.routes.ts	
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Route } from '@angular/router';
-import { PlotterComponent } from './index';
-
-export const PlotterRoutes: Route[] = [
-	{
-		path: 'plotter',
-		component: PlotterComponent
-	}
-];