<html xmlns="http://www.w3.org/1999/xhtml">
<meta charset="UTF-8">
<head>
    <!-- build:js bodymovin.js -->
    <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script src="js/main.js"></script>
    <script src="js/3rd_party/transformation-matrix.js"></script>
    <script src="js/utils/MatrixManager.js"></script>
    <script src="js/utils/animationFramePolyFill.js"></script>
    <script src="js/utils/common.js"></script>
    <script src="js/utils/canvasPolyFill.js"></script>
    <script src="js/utils/functionExtensions.js"></script>
    <script src="js/utils/bez.js"></script>
    <script src="js/utils/DataManager.js"></script>
    <script src="js/renderers/SVGRenderer.js"></script>
    <script src="js/renderers/CanvasRenderer.js"></script>
    <script src="js/mask.js"></script>
    <script src="js/elements/BaseElement.js"></script>
    <script src="js/elements/CompElement.js"></script>
    <script src="js/elements/ImageElement.js"></script>
    <script src="js/elements/ShapeElement.js"></script>
    <script src="js/elements/ShapeItemElement.js"></script>
    <script src="js/elements/SolidElement.js"></script>
    <script src="js/elements/TextElement.js"></script>
    <script src="js/elements/canvasElements/CVBaseElement.js"></script>
    <script src="js/elements/canvasElements/CVCompElement.js"></script>
    <script src="js/elements/canvasElements/CVImageElement.js"></script>
    <script src="js/elements/canvasElements/CVShapeElement.js"></script>
    <script src="js/elements/canvasElements/CVShapeItemElement.js"></script>
    <script src="js/elements/canvasElements/CVSolidElement.js"></script>
    <script src="js/elements/canvasElements/CVTextElement.js"></script>
    <script src="js/elements/canvasElements/CVMaskElement.js"></script>
    <script src="js/animation/AnimationManager.js"></script>
    <script src="js/animation/AnimationItem.js"></script>
     <script src="js/module.js"></script>
    <!-- endbuild -->
</head>
<body style="background-color:#666; margin: 0px;height: 100%; font-family: sans-serif;font-size: 10px">
<div style="width:510px;height:676px;background-color:#000" class="bodymovin" data-bm-path="exports/mcangel" data-bm-type="svg" data-bm-loop="true" data-bm-prerender="true"></div>
<script>
    var pathsArray = [];
    var uniquePaths = [];
    var nanCount = 0;
    function getUniquePaths(){
        $.each(pathsArray, function(i, el){
            if($.inArray(el, uniquePaths) === -1) uniquePaths.push(el);
        });
    }

    function count() {
        pathsArray.sort();

        var current = null;
        var cnt = 0;
        for (var i = 0; i < pathsArray.length; i++) {
            if (pathsArray[i] != current) {
                if (cnt > 1) {
                    document.write(current + ' comes --> ' + cnt + ' times<br>');
                    //document.write(cnt + ' times<br>');
                }
                current = pathsArray[i];
                cnt = 1;
            } else {
                cnt++;
            }
        }
        if (cnt > 0) {
            document.write(current + ' comes --> ' + cnt + ' times');
            //document.write(cnt + ' times');
        }

    }
</script>
</body>
</html>
