solved special characters
diff --git a/player/js/elements/TextElement.js b/player/js/elements/TextElement.js
index b30e890..18adf1f 100644
--- a/player/js/elements/TextElement.js
+++ b/player/js/elements/TextElement.js
@@ -40,8 +40,10 @@
   var pathNodes;
   var shapeStr = '';
   for (j = 0; j < jLen; j += 1) {
-    pathNodes = shapes[j].ks.k;
-    shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);
+    if (shapes[j].ty === 'sh') {
+      pathNodes = shapes[j].ks.k;
+      shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);
+    }
   }
   return shapeStr;
 };
diff --git a/player/js/elements/canvasElements/CVTextElement.js b/player/js/elements/canvasElements/CVTextElement.js
index 866a6e1..c58adb9 100644
--- a/player/js/elements/canvasElements/CVTextElement.js
+++ b/player/js/elements/canvasElements/CVTextElement.js
@@ -89,26 +89,29 @@
       yPos += firstLine ? 1 : 0;
       firstLine = false;
     }
-
     shapes = shapeData.shapes ? shapeData.shapes[0].it : [];
     jLen = shapes.length;
     matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
     if (singleShape) {
       this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);
     }
-    commands = createSizedArray(jLen);
+    commands = createSizedArray(jLen - 1);
+    var commandsCounter = 0;
     for (j = 0; j < jLen; j += 1) {
-      kLen = shapes[j].ks.k.i.length;
-      pathNodes = shapes[j].ks.k;
-      pathArr = [];
-      for (k = 1; k < kLen; k += 1) {
-        if (k === 1) {
-          pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
+      if (shapes[j].ty === 'sh') {
+        kLen = shapes[j].ks.k.i.length;
+        pathNodes = shapes[j].ks.k;
+        pathArr = [];
+        for (k = 1; k < kLen; k += 1) {
+          if (k === 1) {
+            pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
+          }
+          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));
         }
-        pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));
+        pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
+        commands[commandsCounter] = pathArr;
+        commandsCounter += 1;
       }
-      pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));
-      commands[j] = pathArr;
     }
     if (singleShape) {
       xPos += letters[i].l;
diff --git a/player/js/elements/htmlElements/HTextElement.js b/player/js/elements/htmlElements/HTextElement.js
index 866f25e..040a4ea 100644
--- a/player/js/elements/htmlElements/HTextElement.js
+++ b/player/js/elements/htmlElements/HTextElement.js
@@ -138,7 +138,7 @@
         shapeData = null;
       }
       matrixHelper.reset();
-      if (shapeData && shapeData.shapes) {
+      if (shapeData && shapeData.shapes && shapeData.shapes.length) {
         shapes = shapeData.shapes[0].it;
         matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
         shapeStr = this.createPathShape(matrixHelper, shapes);
diff --git a/player/js/elements/svgElements/SVGTextElement.js b/player/js/elements/svgElements/SVGTextElement.js
index 683ff0e..e580b02 100644
--- a/player/js/elements/svgElements/SVGTextElement.js
+++ b/player/js/elements/svgElements/SVGTextElement.js
@@ -15,6 +15,10 @@
 import SVGCompElement from './SVGCompElement'; // eslint-disable-line
 import SVGShapeElement from './SVGShapeElement';
 
+var emptyShapeData = {
+  shapes: [],
+};
+
 function SVGTextLottieElement(data, globalData, comp) {
   this.textSpans = [];
   this.renderType = 'svg';
@@ -174,10 +178,11 @@
         if (charData.t === 1) {
           glyphElement = new SVGCompElement(charData.data, this.globalData, this);
         } else {
-          if (!charData.data.shapes) {
-            charData.data.shapes = [];
+          var data = emptyShapeData;
+          if (charData.data && charData.data.shapes) {
+            data = charData.data;
           }
-          glyphElement = new SVGShapeElement(charData.data, this.globalData, this);
+          glyphElement = new SVGShapeElement(data, this.globalData, this);
         }
         this.textSpans[i].glyph = glyphElement;
         glyphElement._debug = true;
diff --git a/player/js/utils/FontManager.js b/player/js/utils/FontManager.js
index 6be9323..a2e7434 100644
--- a/player/js/utils/FontManager.js
+++ b/player/js/utils/FontManager.js
@@ -8,6 +8,9 @@
     w: 0,
     size: 0,
     shapes: [],
+    data: {
+      shapes: [],
+    },
   };
   var combinedCharacters = [];
   // Hindi characters