OSDN Git Service

Build SIE 30 beta
authordhrname <dhrname@users.sourceforge.jp>
Mon, 14 Nov 2016 12:04:01 +0000 (21:04 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Mon, 14 Nov 2016 12:04:01 +0000 (21:04 +0900)
Readme.html
org/sie-uncompressed.js
sie.js
sie.js.gz

index 336da56..0996654 100644 (file)
@@ -72,8 +72,8 @@
 </form>\r
 <object data="org/svg/zeimusu_sakura_.svg" type="image/svg+xml" width="180" height="200"></object>\r
 <h2>動作環境</h2>\r
-<p>IE11で確認</p>\r
-<p>その他、Firefox39、Opera30(以上、環境はWindows 7)</p>\r
+<p>IE11ã\81¨Edgeã\81§ç¢ºèª\8d</p>\r
+<p>その他、Firefox49.0.2、Opera41(以上、環境はWindows 10)</p>\r
 <h2>注意</h2>\r
 <p>必ず、サーバにアップロードしてください。IEのセキュリティ上、ローカルでは動きません。</p>\r
 <h2>コミュニティ</h2>\r
index f306a3f..d48ac84 100755 (executable)
  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */
+/*!SIE under the MIT Lisence\r
+ */\r
+/*! Copyright 2016 dhrname and other contributors\r
+ * http://sie.osdn.jp/\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining\r
+ * a copy of this software and associated documentation files (the\r
+ * "Software"), to deal in the Software without restriction, including\r
+ * without limitation the rights to use, copy, modify, merge, publish,\r
+ * distribute, sublicense, and/or sell copies of the Software, and to\r
+ * permit persons to whom the Software is furnished to do so, subject to\r
+ * the following conditions:\r
+ * \r
+ * The above copyright notice and this permission notice shall be\r
+ * included in all copies or substantial portions of the Software.\r
+ * \r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
  */\r
 \r
 \r
@@ -283,9 +307,10 @@ base("$frame").mix ( {
   /*タイムラインのリスト (時間区間の設定ができる)*/\r
   timelines: [],\r
 \r
-  /*開始フレーム数。アニメーションの開始条件となる\r
-   * 単位はフレーム数であって、秒数ではない*/\r
-  begin: 0,\r
+  /*開始フレーム数の候補。アニメーションの開始条件となる\r
+   * 単位はフレーム数であって、秒数ではない\r
+   * なお、初期値については、開始フレームが負の値を考慮しているため*/\r
+  begin: -Number.MAX_VALUE,\r
 \r
   /*活動継続時間 (Active Duration)のフレーム数。アニメーションの継続条件となる\r
    * 単位はフレーム数であって、秒数ではない*/\r
@@ -311,9 +336,6 @@ base("$frame").mix ( {
   /*setFrame メソッド\r
    * フレーム数を数値num まで進めるか、戻す*/\r
   setFrame: function( /*number*/ num) {\r
-    if((num < this.begin) || (num >= (this.begin+this.activeTime))) {\r
-      return;\r
-    }\r
     this.currentFrame = num;\r
     var timelines = this.timelines;\r
     for (var i=0;i<timelines.length;++i) {\r
@@ -354,10 +376,213 @@ base("$frame").mix ( {
     list = j = void 0;\r
   }\r
 } ).mix( function($frame) {\r
-  /*$endFrame オブジェクト\r
-   * 終了時の処理をするためのフレームを集める*/\r
-  $frame.up("$endFrame").mix( {\r
-    timelines: []\r
+  $frame.up("$list").mix( {\r
+    /*終了時刻(単位フレーム数)のキャッシュとして使う*/\r
+    end: 0,\r
+    \r
+    /*開始時刻から終了時刻までのフレーム数\r
+     * これがactiveTimeより短ければ、活動継続時間とみなす*/\r
+    beginEnd: Number.MAX_VALUE,\r
+    \r
+    /*開始時刻(単位フレーム数)リスト (後述のupdateStateメソッドで使う)*/\r
+    beginList: { \r
+      next: null,\r
+      value: Number.MAX_VALUE\r
+    },\r
+    \r
+    /*終了時刻(単位フレーム数)リスト (後述のupdateStateメソッドで使う)*/\r
+    endList: {\r
+       next: null,\r
+       value: Number.MAX_VALUE\r
+    },\r
+    \r
+    addBeginList: function (num) {\r
+      return ( this.beginList = {\r
+                  value: num,\r
+                  next: this.beginList\r
+                } );\r
+    },\r
+    \r
+    addEndList: function (num) {\r
+      return ( this.endList = {\r
+                  value: num,\r
+                  next: this.endList\r
+                } );\r
+    },\r
+    \r
+    /*引数に渡された時刻リストの中から、現在フレームf以下の、最大値を求めるメソッド\r
+     * Number.MIN_VALUEの値を返したときはリストの中にf以下の値がないことを示す*/\r
+    getMaxList: function (f, list) {\r
+      var maxTime = -Number.MAX_VALUE; /*時刻の最大値*/\r
+      while( list ) {\r
+        var v = list.value;\r
+        /*f以下の開始リスト値のうち、最大値をmaxTimeに代入*/\r
+        if ( (v <= f)\r
+             && (maxTime <= v) ) {\r
+          maxTime = v;\r
+        }\r
+        list = list.next;\r
+      }\r
+      return maxTime;\r
+    },\r
+      \r
+    /*現在の要素の状態を数値で示す(マジックナンバーは後述の大文字プロパティを使う)*/\r
+    state: 0,\r
+    \r
+    /*アニメーション待機状態を示す定数*/\r
+    WAITING: 0,\r
+    \r
+    /*アニメーション開始状態を示す定数*/\r
+    BEGINNING: 1,\r
+    \r
+    /*アニメーション再生中の状態を示す定数*/\r
+    PLAYING: 2,\r
+    \r
+    /*アニメーション終了状態を示す定数*/\r
+    ENDING: 3,\r
+    \r
+    /*終了処理をした後の待機状態を示す定数*/\r
+    POSTWAITING: 4,\r
+    \r
+    /*初期化用メソッド*/\r
+    init: function() {\r
+      this.state = this.WAITING;\r
+      this.begin = 0;\r
+      return this;\r
+    },\r
+    \r
+    /*引数で指定されたフレーム数に応じて、stateプロパティを更新するメソッド*/\r
+    updateState: function( /*number*/ f) {\r
+      if (f === void 0) {\r
+        /*引数fが指定されないときには状態を更新しない*/\r
+        return this;\r
+      }\r
+      var state = this.state,\r
+          wait = /*this.WAITING*/ 0,\r
+          begin = /*this.BEGINNING*/ 1,\r
+          play = /*this.PLAYING*/ 2,\r
+          end = /*this.ENDING*/ 3,\r
+          post = /*this.POSTWAITING*/ 4;\r
+      /*beginListプロパティと、endListプロパティの中で、\r
+       * 現在フレーム数 f より大きい数値は、更新できる条件と無関係なので、除外しておく\r
+       * だから、f以下の値の中から、最大値を探して、\r
+       * それをbeginプロパティの値cacheBeginと比較する*/\r
+      var startTime = this.getMaxList(f, this.beginList);\r
+      if (startTime === -Number.MAX_VALUE) {\r
+        (state > post) && (this.state = begin);\r
+        return this;\r
+      }\r
+      var endTime = this.getMaxList(f, this.endList),\r
+          isWait = (state === wait),\r
+          cacheBegin = this.begin;\r
+      if ( !startTime && isWait) {\r
+          /*開始時刻が0ならば、アニメーションを開始\r
+           * ただし、アニメが終了した後のPOSTWAITING状態の時には作動させない*/\r
+          this.begin = 0;\r
+          this.state = begin;\r
+      } else if ( isWait || (state === post) ) {\r
+        if (startTime > cacheBegin) {\r
+          this.state = begin;\r
+          /*beginプロパティに開始時刻をキャッシュ用に保存*/\r
+          this.begin = startTime;\r
+        }\r
+      } else if (state === begin) {\r
+        if (endTime >= cacheBegin) {\r
+          /*終了時刻にもう到達したときは、直接BEGINNING状態からENDING状態へ移行*/\r
+          this.state = end;\r
+          /*endTimeを終了時刻とみなす*/\r
+          (endTime > 0) && (this.end = endTime);\r
+          /*activeTimeプロパティは、begin属性とend属性が反映されていないため、\r
+           * beginEndプロパティに別に設定しておく*/\r
+          this.beginEnd = 0;\r
+        } else {\r
+          this.state = play;\r
+        }\r
+      } else if (state === play) {\r
+        /*activeTimeプロパティを比較して、変数endTimeを書き換える*/\r
+        var act = cacheBegin + this.activeTime;\r
+        endTime = (endTime > act) ? act\r
+                                  : endTime;\r
+        if ( (f >= act) || (endTime >= cacheBegin) || (startTime > cacheBegin) ) {\r
+          /*終了時刻に到達したか、再び開始イベントが発火されたとき*/\r
+          this.state = end;\r
+          if (endTime > 0) {\r
+            /*endTimeを終了時刻とみなす*/\r
+            this.end = endTime;\r
+            /*activeTimeプロパティは、begin属性とend属性が反映されていないため、\r
+             * beginEndプロパティに別に設定しておく*/\r
+            this.beginEnd = endTime - cacheBegin;\r
+          }\r
+        }\r
+      } else if (state === end) {\r
+        if (startTime > cacheBegin) {\r
+          /*再生中に開始イベントが発火されて、終了状態となったとき*/\r
+          this.state = begin;\r
+          this.begin = startTime;\r
+        } else {\r
+          this.state = post;\r
+        }\r
+      } else {\r
+        this.state = begin;\r
+      }\r
+      cacheBegin = startTime = endTime = isWait = state = void 0;\r
+      return this;\r
+    },\r
+    \r
+    /*addEventメソッドで使われるイベントリスト(開始時に登録されたリスナー関数が呼び出される)*/\r
+    _beginListenerList: [],\r
+    \r
+    /*addEventメソッドで使われるイベントリスト(終了時に登録されたリスナー関数が呼び出される)*/\r
+    _endListenerList: [],\r
+    \r
+    /*addEventメソッドで使われるイベントリスト(再生時に登録されたリスナー関数が呼び出される)*/\r
+    _playListenerList: [],\r
+    \r
+    /*開始と再生と終了時に発火されるイベントリスナーを登録するメソッド*/\r
+    addEvent: function ( /*string*/ eventName, /*fnction*/ listener) {\r
+      var evtName = "_" +eventName+ "ListenerList";\r
+      /*プロトタイプ継承していた場合は新しく配列を作成*/\r
+      if (!this.hasOwnProperty(evtName)) {\r
+        this[evtName] = [];\r
+      }\r
+      this[evtName].push(listener);\r
+    },\r
+    \r
+    /*入力されたフレーム数fの場面に切り替えるメソッド*/\r
+    setFrame: function( /*number*/ f) {\r
+      this.currentFrame = f;\r
+      var state = this.updateState(f).state;\r
+      /*アニメーション開始と再生と、終了状態のときに、beginとplayとendイベントを呼び出しておいて、\r
+       * 次の状態(再生状態)に遷移する*/\r
+      if (state === /*this.PLAYING*/ 2) {\r
+        var list = this._playListenerList;\r
+        for (var i=0;i<list.length;++i) {\r
+          list[i](this);\r
+        }\r
+      } else if (state === /*this.BEGINNING*/ 1) {\r
+        list = this._beginListenerList;\r
+        for (var i=0;i<list.length;++i) {\r
+          list[i](this);\r
+        }\r
+        /*開始時刻と終了時刻が一致した場合はstateはENDING状態\r
+         * それ以外はPLAYING状態*/\r
+        state = this.updateState(f).state;\r
+      }\r
+      if (state === /*this.ENDING*/ 3) {\r
+        list = this._endListenerList;\r
+        for (var i=0;i<list.length;++i) {\r
+          list[i](this);\r
+        }\r
+        if (this.updateState(f).state === /*this.BEGINNING*/ 1) {\r
+          /*再生中にbeginイベントが呼び出された場合*/\r
+          this.updateState(f);\r
+        }\r
+      }\r
+      state = list = void 0;\r
+    }\r
+  } ).mix( function() {\r
+    /*後述の$beginや$endで使うメソッド*/\r
+    this.addList = this.addBeginList;\r
   } );\r
    \r
   /*$begin オブジェクト\r
@@ -444,19 +669,17 @@ base("$frame").mix ( {
           event: str\r
         };\r
       }\r
-    },\r
+    }, \r
     \r
-    /*parse メソッド\r
-     * stringプロパティを解析して、フレーム数を算出し、結果を$frame.beginプロパティに出力\r
+    /*_parse メソッド\r
+     * 引数の文字列を解析して、フレーム数を算出し、結果を$frame.beginプロパティに出力\r
      * また、イベントリスナーに登録をしておく*/\r
-    parse: function() {\r
-      /*初期値を設定*/\r
-      this.begin = 0;\r
-      this.isResolved = false;\r
-      var str = this.trim(this.string),\r
-          plusminus = str.search(/[\+\-]/),\r
+    _parse: function (str) {\r
+      var plusminus = str.search(/[\+\-]/),\r
           event = null,\r
-          ele;\r
+          ele,\r
+          /*endListのvalueプロパティには、活動継続フレーム数と開始フレーム数を足したものが入る*/\r
+          endList = this.$list.addEndList(Number.MAX_VALUE);\r
       if (str === "indefinite") {\r
         this.begin = Number.MAX_VALUE;\r
       } else if (plusminus > 0) {\r
@@ -479,47 +702,73 @@ base("$frame").mix ( {
       this.begin = Math.floor( this.begin * this.fpms);\r
       if (str === "indefinite") {\r
         /*begin属性の値がindefiniteの場合は、何もしない。\r
-         * 開始時刻はlistenerメソッドの呼び出しか、beginElementメソッドに依存*/\r
+         * 開始時刻はbeginElementメソッドに依存*/\r
       } else if (event) {\r
         ele = event.id ? this.eventTarget.ownerDocument.getElementById(event.id)\r
                         : this.eventTarget;\r
-        /*イベントの時間差を設定しておく*/\r
-        this.eventOffset = this.begin;\r
+        /*イベントの時間差を設定しておく\r
+         * eventOffsetとobjListの変数はクロージャとしてlistener関数で使われる*/\r
+        var eventOffset = this.begin,\r
+            /*objListのvalueプロパティはあとで書き換えられる(イベントの場合のみ)*/\r
+            objList = this.$list.addList(Number.MAX_VALUE),\r
+        /*イベントのリスナーとして使う*/\r
+            listener = function(evt) {\r
+              objList.value = this.begin = eventOffset + base("$frame").currentFrame;\r
+              this.isResolved = true;\r
+            };\r
+        this.eventOffset = eventOffset;\r
         if (this.repeat > 0) {\r
           ele && ele.addEventListener("repeatEvent", (function(evt) {\r
             if (evt.detail === this.repeat) {\r
-              this.listener(evt);\r
+              listener.call(this, evt);\r
             } }).bind(this), true);\r
         } else if (this.accessKey) {\r
           document.documentElement.addEventListener("keydown", (function(evt) {\r
             if (evt.char === this.accessKey) {\r
-                this.listener(evt);\r
+                listener.call(this, evt);\r
               } }).bind(this), false);\r
         } else {\r
           var evtName = /^(?:begin|end|repeat)$/.test(event.event) ? event.event + "Event"\r
                           : event.event;\r
-          ele && ele.addEventListener(evtName, this.listener.bind(this), false);\r
+          ele && ele.addEventListener(evtName, listener.bind(this), false);\r
         }\r
       } else {\r
-        /*イベントの影響を防ぐため\r
-         * すでに、フレームオブジェクトのタイムラインには登録済みなので、\r
-         * フレームではなく、自分独自のタイムラインに登録しておけばよい*/\r
-        this.$frame = this;\r
+        /*開始リストに登録しておく($endの場合は終了リストに登録)*/\r
+        this.$list.addList(this.begin);\r
       }\r
       s = event = str = plusminus = ele = void 0;\r
+    },\r
+    \r
+    /*stringプロパティを解析して、\r
+     * 開始フレーム数の算出や、イベントリスナーの登録をするメソッド*/\r
+    parse: function() {\r
+      /*初期値を設定*/\r
+      this.begin = 0;\r
+      this.isResolved = false;\r
+      var str = this.trim(this.string);\r
+      if (str.indexOf(";") > -1){\r
+        /*;で区切られたリストを一つずつ解析*/\r
+        var list = str.split(";");\r
+        for (var i=0;i<list.length;++i) {\r
+          this._parse(list[i]);\r
+        }\r
+      } else {\r
+        this._parse(str);\r
+      }\r
+      s = str = void 0;\r
       return this;\r
     },\r
     \r
-    /*イベントのリスナーとして、parseメソッドで使う*/\r
-    listener: function(evt) {\r
-      this.begin = this.eventOffset + this.$frame.currentFrame;\r
-      var s = this.$activate;\r
-      s.begin = this.begin;\r
-      this.activeTime = s.call() || Number.MAX_VALUE;\r
+    /*$listと$activateオブジェクトを更新して、活動継続時間を求めるメソッド*/\r
+    updateList: function() {\r
+      this.$list = this.$list.up();\r
+      /*beginとend属性を考慮に入れないで、活動継続時間を求める*/\r
+      var s = ( this.$activate = this.$activate.up() );\r
+      /*$endオブジェクトに付属している$listプロパティを更新したものと一致させておく*/\r
+      s.end && (s.end.$list = this.$list);\r
+      this.activeTime = this.$list.activeTime = s.call() || Number.MAX_VALUE;\r
       this.simpleDuration = s.simpleDur;\r
-      s = void 0;\r
-      this.$frame.addLine(this);\r
-      this.isResolved = true;\r
+      return this;\r
     }\r
     \r
   /*$activate オブジェクト\r
@@ -561,6 +810,7 @@ base("$frame").mix ( {
     \r
     /*関数型の呼び出しメソッド\r
      * base.jsのofメソッドを活用して活動継続時間を算出\r
+     * ただし、begin属性とend属性については、別途、$frame.$listで定める\r
      * 計算方法はSMILアニメーション 3.3.4節を参照\r
      * http://www.w3.org/TR/smil-animation/#ComputingActiveDur\r
      */\r
@@ -569,9 +819,7 @@ base("$frame").mix ( {
           dur = this.simpleDur,\r
           isIndefRepeatCount = (this.repeatCount === ind),\r
           isIndefRepeatDur = (this.repeatDur === ind),\r
-          isIndefEnd = (this.end === ind),\r
           isDur = dur || (dur === 0),\r
-          isEnd = this.end || (this.end === 0),\r
           isRepeatCount = this.repeatCount || (this.repeatCount === 0),\r
           isRepeatDur = this.repeatDur || (this.repeatDur === 0),\r
           actList = [],\r
@@ -592,22 +840,15 @@ base("$frame").mix ( {
       if (isRepeatDur && !isIndefRepeatDur) {\r
         actList.push( Math.floor( this.offset(this.repeatDur) * this.fpms) );\r
       }\r
-      if (isEnd && !isIndefEnd) {\r
-        actList.push( this.end - this.begin );\r
-      }\r
       if (isDur && !isRepeatCount && !isRepeatDur) {\r
         /*repeatCountやrepeatDur属性が指定されていない場合*/\r
         actList.push( dur );\r
       }\r
 \r
       /*長くなるため、インライン関数を活用\r
-       * indef関数は活動継続時間が不定かどうか、もし、不定なら真を返す*/\r
+       * indef関数はbeginとend属性を考慮せずに、\r
+       * 活動継続時間が不定かどうか、もし、不定なら真を返す*/\r
       function indef() {\r
-        if(isIndefEnd) {\r
-          return true;\r
-        } else if (isEnd) {\r
-          return false;\r
-        }\r
         return !!( (!isDur && !isRepeatDur)\r
                    || (isIndefRepeatCount && !isRepeatDur)\r
                    || (isIndefRepeatDur && !isRepeatCount)\r
@@ -638,26 +879,15 @@ base("$frame").mix ( {
       if (!this.string) {\r
         return null;\r
       }\r
+      /*addListメソッドには、addBeginList関数が入っているはずなので、それを一時的に変更する*/\r
+      this.$list.addList = this.$list.addEndList;\r
       this.parse(this.string);\r
+      this.$list.addList = this.$list.addBeginList;\r
       return this.isResolved ? this.begin\r
                              : "indefinite";\r
     }\r
   } ).mix( {\r
-    /*イベントリスナー用の関数*/\r
-    listener: function(evt) {\r
-      if (this.begin <= 0) {\r
-        /*強制的に終了させる*/\r
-        this.removeLine(this.$begin);\r
-      }\r
-      this.begin = this.eventOffset + this.$frame.currentFrame;\r
-      var s = this.$begin.$activate;\r
-      s.end = this.begin;\r
-      /*未解決だったendの値が、イベントの発生により、解決して再定義されたとき、\r
-       * $activateオブジェクトを使って活動継続時間を再計算する*/\r
-      this.$begin.activeTime = s.call();\r
-      this.isResolved = true;\r
-      s = void 0;\r
-    }\r
+    $list: $frame.$begin.$list.up()\r
   } );\r
 } );\r
 /*$from オブジェクト\r
@@ -1087,6 +1317,89 @@ base("$calcMode").up("$attribute").mix( {
     this.__cacheAttr = "";\r
     value = attrName = ele = void 0;\r
   },\r
+  \r
+  /*アニメーションの対象となる要素を値として返すメソッド\r
+   * もっぱら、pushメソッドで使われる*/\r
+  initTargetElement: function() {\r
+    var ele = this._ele;\r
+    var s = ele.parentNode || null;\r
+    var id = ele.getAttribute("xlink:href");\r
+    /*getAttributeNSメソッドでうまくいかなかったため、NSなしで代用*/\r
+    if (id) {\r
+      return ele.ownerDocument.getElementById(id.slice(1));\r
+    }\r
+    if ( id = ele.getAttributeNS(null, "targetElement") ) {\r
+      return ele.ownerDocument.getElementById(id);\r
+    }\r
+    return s;\r
+  },\r
+  \r
+  /*repeatイベントの発火時刻リスト\r
+   * setSmilEventメソッドを見よ*/\r
+  _repeatList: [],\r
+  \r
+  /*リピート回数を示すプロパティ\r
+   * setSmilEventメソッドを見よ*/\r
+  _repeatCount: 0,\r
+  \r
+  /*SMILイベント関連を発火させるためのメソッド\r
+   * もっぱら、$attributeオブジェクトのpush メソッドで使われる*/\r
+   setSmilEvent: function($list) {\r
+    $list.addEvent("begin", function($list) {\r
+        var target = this._ele,\r
+            detail = 0;\r
+        /*IE11のために、MouseEventsでSMILEventsの代用をする*/\r
+        var evt = target.ownerDocument.createEvent("MouseEvents");\r
+        evt.initMouseEvent("beginEvent" ,true, true, window, detail, 0, 0, 0, 0, false, false, false, false, 0, target);\r
+        target.dispatchEvent(evt);\r
+        /*repeatイベントのために、_repeatListプロパティを初期化する*/\r
+        var list = this._repeatList = [],\r
+            active = $list.activeTime,\r
+            begin = $list.begin,\r
+            simpleDuration = this.timeline.simpleDuration;\r
+            if (simpleDuration && (simpleDuration !== active)\r
+                  && (active !== Number.MAX_VALUE) ) {\r
+              /*活動継続時間と単純持続時間が異なるとき、repeatイベントを設定*/\r
+              for (var m= simpleDuration, n=1;m < active ; m+=simpleDuration) {\r
+                list.push( {\r
+                  frame: begin + m,\r
+                  /*リピートの回数 (n >= 1)*/\r
+                  count: n\r
+                } );\r
+                ++n;\r
+              }\r
+            }\r
+    }.bind(this) );\r
+    \r
+    $list.addEvent("play", function($list) {\r
+      var target = this._ele,\r
+          detail = 0,\r
+          frame = $list.currentFrame,\r
+          list = this._repeatList;\r
+      if (!list.length) {\r
+        return;\r
+      }\r
+      for (var i=0;i<list.length;++i) {\r
+        if ( (this._repaetCount >= i+1)\r
+            || (list[i].frame >= frame) ) {\r
+          this._repeatCount = detail;\r
+          break;\r
+        } \r
+        detail = list[i].count;\r
+        var evt = target.ownerDocument.createEvent("MouseEvents");\r
+        evt.initMouseEvent("repeatEvent" ,true, true, window, detail, 0, 0, 0, 0, false, false, false, false, 0, target);\r
+        target.dispatchEvent(evt);\r
+      }\r
+    }.bind(this) );\r
+    \r
+    $list.addEvent("end", function() {\r
+        var target = this._ele,\r
+            detail = 0;\r
+        var evt = target.ownerDocument.createEvent("MouseEvents");\r
+        evt.initMouseEvent("endEvent" ,true, true, window, detail, 0, 0, 0, 0, false, false, false, false, 0, target);\r
+        target.dispatchEvent(evt);\r
+    }.bind(this) );\r
+   },\r
 \r
   /*引数で指定した要素 ele の属性を解析して、フレームに追加する*/\r
   push: function(/*Element Node*/ ele) {\r
@@ -1095,17 +1408,14 @@ base("$calcMode").up("$attribute").mix( {
     }\r
     /*キャッシュを初期化しておく*/\r
     this.__cacheAttr = "";\r
-    this.element = ele.parentNode || null;\r
-    var id;\r
-    if ( id = ele.getAttributeNS(null, "targetElement") ) {\r
-      this.element = ele.ownerDocument.getElementById(id);\r
-    }\r
-    /*getAttributeNSメソッドでうまくいかなかったため、NSなしで代用*/\r
-    if ( id = ele.getAttribute("xlink:href") ) {\r
-      this.element = ele.ownerDocument.getElementById(id.slice(1));\r
-    }\r
+    \r
+\r
    /*getAttrメソッドとhasAttrValuesメソッドで必要*/\r
     this._ele = ele;\r
+    \r
+    /*initTargetElementメソッドを使って、elementプロパティの初期化*/\r
+    this.element = this.initTargetElement();\r
+    \r
     if (!this.hasAttrValues()) {\r
       /*from属性、to、by、values属性が指定されていない場合、アニメーションの効果が出ないように調整する\r
        *SMILアニメーションの仕様を参照\r
@@ -1116,7 +1426,7 @@ base("$calcMode").up("$attribute").mix( {
       */\r
       return null;\r
     }\r
-    \r
\r
     /*属性値の設定*/\r
     this.attrName = this.getAttr("attributeName", "");\r
     var attrName = this.attrName;\r
@@ -1166,36 +1476,37 @@ base("$calcMode").up("$attribute").mix( {
                     min: this.getAttr("min", "0"),\r
                     max: this.getAttr("max", "indefinite")\r
                   } )\r
-                } ).parse();\r
-    frame.$activate.end.$begin = frame;\r
+                } ).updateList().parse();\r
+    $frame.addLine(frame.$list.init());\r
+    \r
     /*beginElementメソッドを追加*/\r
-    function eleMethod (obj, eventName) {\r
-      return (obj.string !== "indefinite") ? function(){}\r
+    var objList = frame.$list.addList(Number.MAX_VALUE),\r
+        /*endListのvalueプロパティには、活動継続フレーム数と開始フレーム数を足したものが入る*/\r
+        endList = frame.$list.addEndList(Number.MAX_VALUE);\r
+    ele.beginElement = (frame.string !== "indefinite") ? function(){}\r
                         : function() {\r
-                            obj.listener( {\r
-                              /*アニメーションの開始をこのメソッドが呼ばれた時点とする*/\r
-                              timeStamp: Date.now()\r
-                            } );\r
+                            objList.value = frame.begin = base("$frame").currentFrame;\r
+                            frame.isResolved = true;\r
                             var evt = this.ownerDocument.createEvent("MouseEvents");\r
-                            evt.initMouseEvent(eventName + "Event" ,true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, this);\r
+                            evt.initMouseEvent("beginEvent" ,true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, this);\r
                             this.dispatchEvent(evt);\r
                           };\r
-    };\r
-    ele.beginElement = eleMethod(frame, "begin");\r
     /*endElementメソッドを追加*/\r
-    ele.endElement = eleMethod(frame.$activate.end, "end");\r
-    if (frame.isResolved) {\r
-      /*開始時間が初期化されてしまうのを防ぐ*/\r
-      var cacheBegin = frame.begin;\r
-      frame.listener( {\r
-        /*アニメーションの開始をこのメソッドが呼ばれた時点とする*/\r
-        timeStamp: Date.now()\r
-      } );\r
-      frame.begin = cacheBegin;\r
-    }\r
+    var endFrame = frame.$activate.end || {};\r
+    ele.endElement = (endFrame.string !== "indefinite") ? function(){}\r
+                        : function() {\r
+                            if (frame.isResolved) {\r
+                              endFrame.isResolved = true;\r
+                              endList.value  = base("$frame").currentFrame;\r
+                              var evt = this.ownerDocument.createEvent("MouseEvents");\r
+                              evt.initMouseEvent("endEvent" ,true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, this);\r
+                              this.dispatchEvent(evt);\r
+                            }\r
+                          };\r
     /*setFrameメソッドを使ったときの、再帰スタックの使いすぎを防ぐため*/\r
     frame.timelines = [];\r
-    begin = ele = id = void 0;\r
+    this.setSmilEvent(frame.$list);\r
+    begin = ele = void 0;\r
     return frame;\r
   },\r
   \r
@@ -1354,46 +1665,17 @@ base("$calcMode").up("$attribute").mix( {
   to: "",\r
   \r
   /*initメソッドで使われるアニメーション関数*/\r
-  _setFrame: function (frame) {\r
-    this.state = "playing";\r
+  _setFrame: function ($list) {\r
     this.setAttribute(this.to);\r
   },\r
   \r
-  /*アニメーション中かどうかの判別\r
-   * 1, idling アニメがまだ始まっていない待機状態 (規定値)\r
-   * 2, playing アニメーションの再生中\r
-   */\r
-  state: "idling",\r
-  \r
   /*開始を設定されたタイムライン ($beginオブジェクト)*/\r
   timeline: base("$frame").$begin,\r
   \r
-  /*_setEndFrameメソッドで終了処理をさせたいときに、呼び出されるメソッド\r
-   * 終了処理が必要なときだけ、trueを返す*/\r
-  checkEnd: function (frame) {\r
-    var line = this.timeline,\r
-        end = line.begin + line.activeTime;\r
-    if (!line.isResolved || isNaN(end)) {\r
-      /*未解決など問題が発生したとき*/\r
-      line = frame = void 0;\r
-      return false;\r
-    } else if (\r
-          ( ( frame < line.begin ) || ( end <= frame )\r
-          ) && (this.state === "playing") ) {\r
-      /*stateプロパティを書き換えることで、一度のみ、終了処理させる*/\r
-      this.state = "idling";\r
-      line = frame = void 0;\r
-      return true;\r
-    } else {\r
-      line = frame = void 0;\r
-      return false;\r
-    }\r
-  },\r
-  \r
   /*アニメが終了した際の後処理*/\r
-  _setEndFrame: function (frame) {\r
+  _setEndFrame: function ($list) {\r
     /*removeの場合、アニメーションを凍結せずに、もとに戻す*/\r
-    if (this.checkEnd(frame) && (this.fill === "remove")) {\r
+    if (this.fill === "remove") {\r
       this.removeAttribute();\r
     }\r
   },\r
@@ -1411,22 +1693,13 @@ base("$calcMode").up("$attribute").mix( {
     var thisele = this.element;\r
     if (line && thisele) {\r
       this.timeline = line;\r
-      /*ラインの中に、属性処理をするためのラインを追加*/\r
-      line.addLine(\r
-       { setFrame: this._setFrame.bind(this),\r
-         begin: 1,\r
-         activeTime: 1\r
-       }\r
-      );\r
-      base("$frame").$endFrame.addLine(\r
-        { setFrame: this._setEndFrame.bind(this),\r
-          begin: 1,\r
-          activeTime: 1\r
-        }\r
-      );\r
+      /*$begin.$listのイベントに属性処理を追加*/\r
+      line.$list.addEvent("begin", this._setFrame.bind(this));\r
+      line.$list.addEvent("play", this._setFrame.bind(this));\r
+      line.$list.addEvent("end", this._setEndFrame.bind(this));\r
+      /*アニメーションが再起動する可能性もあるため、$listのstateプロパティはここで初期化*/\r
+      line.$list.state = line.$list.WAITING;\r
     }\r
-    /*アニメーションが再起動する可能性もあるため、stateプロパティはここで初期化*/\r
-    this.state = "idling";\r
     line = thisele = void 0;\r
   }\r
 }).up("$animateElement").mix( {\r
@@ -1459,7 +1732,8 @@ base("$calcMode").up("$attribute").mix( {
     return "";\r
   },\r
   \r
-  _setFrame: function(currentTime) {\r
+  _setFrame: function($list) {\r
+    var currentFrame = $list.currentFrame;\r
     /*durationは単純継続時間\r
      *advanceは継続時間内での、進捗率\r
      *  仕様を参照 http://www.w3.org/TR/smil-animation/#AnimFuncValues\r
@@ -1471,32 +1745,37 @@ base("$calcMode").up("$attribute").mix( {
         /*単純継続時間が不定の場合、補間はせずに初期値が採用されるため、advanceは0となる\r
          * 仕様を参照 SMIL Animation 3.2.2. Animation function values のInterpolation and indefinite simple durations\r
          * http://www.w3.org/TR/2001/REC-smil-animation-20010904/#AnimFuncValues*/\r
-        advance = duration ? ( (currentTime - line.begin) % duration ) / duration\r
+        advance = duration ? ( (currentFrame - $list.begin) % duration ) / duration\r
                     : 0;\r
     this.setAttribute(this.tocall(advance));\r
-    this.state = "playing";\r
     line = duration = advance = void 0;\r
   },\r
   \r
-  /*_setEndFrameメソッドは、終了処理と凍結作業をするときに、falseを返す*/\r
-  _setEndFrame: function(frame) {\r
-    /*上書きされたメソッドを呼び出してアニメーションの凍結作業をする*/\r
-    if (!this.checkEnd(frame)) {\r
-      return;\r
+  /*凍結処理をするために、進捗率を最後まで進めて調整するメソッド\r
+   * 返り値は調整された進捗率\r
+   * もっぱら、_setEndFrameメソッドで使われる*/\r
+  getAdvanceEnd: function($list) {\r
+    var line = this.timeline,\r
+        duration = line.simpleDuration;\r
+    if (duration) {\r
+      var time = (line.activeTime > $list.beginEnd) ? $list.beginEnd\r
+                  : line.activeTime;\r
+      var advance = ( time % duration ) / duration;\r
+      /*例外が発生するため、進捗率が1を超えないように処理*/\r
+      advance = (advance > 1) ? 1 : advance;\r
+       /*活動継続時間と単純継続時間が一致すると、余りは0となるため以下の処理*/\r
+      advance = advance || 1;\r
+    } else {\r
+      advance = 0;\r
     }\r
+    return advance;\r
+  },\r
+  \r
+  /*_setEndFrameメソッドは、終了処理と凍結作業をする*/\r
+  _setEndFrame: function($list) {\r
+    /*上書きされたメソッドを呼び出してアニメーションの凍結作業をする*/\r
     if (this.fill === "freeze") {\r
-      var line = this.timeline,\r
-          duration = line.simpleDuration;\r
-      if (duration) {\r
-        var advance = ( line.activeTime % duration ) / duration;\r
-        /*例外が発生するため、進捗率が1を超えないように処理*/\r
-        advance = (advance > 1) ? 1 : advance;\r
-         /*活動継続時間と単純継続時間が一致すると、余りは0となるため以下の処理*/\r
-        advance = advance || 1;\r
-      } else {\r
-        advance = 0;\r
-      }\r
-      this.setAttribute(this.tocall(advance));\r
+      this.setAttribute(this.tocall( this.getAdvanceEnd($list) ));\r
       line = duration = advance = void 0;\r
     } else {\r
       this.removeAttribute();\r
@@ -1703,32 +1982,12 @@ base("$calcMode").up("$attribute").mix( {
     } );\r
     degits = void 0;\r
     return s;\r
-  }\r
-\r
-/*initメソッドに追加処理\r
- * onメソッドについては、base.jsを参照のこと*/\r
-} ).on ("init", function(ele) {\r
-  var isColor = /^(?:fill|stroke|stop-color|color)$/.test(this.attrName);\r
-  if (isColor) {\r
-    /*通常は、小数点以下の桁数を既定値の1桁とする\r
-     *RGB形式では補間に、小数を使わないため、0桁に設定\r
-     * (なお、この作業は、setKeyメソッドの前に済ませておく必要がある)*/\r
-    this.degits = 0;\r
-  }\r
-  var to, \r
-      keyTime = 0,\r
-      /*関数toRGBはrgbColor形式への変換処理で使う*/\r
-      toRGB = function(x) { return x; };\r
-  if (ele) {\r
-    this.mode = ele.getAttributeNS(null, "calcMode") || "linear";\r
-    this.setString();\r
-    to = this.setKey(ele);\r
-  }\r
-  if (isColor) {\r
-    /*#から始まる文字列を、rgb(.., .., ..,)形式へと変換するための関数*/\r
-    var keywords = this._keywords;\r
-    toRGB = function(rgbColor) {\r
-           var keyword = keywords[rgbColor];\r
+  },\r
+  \r
+  /*#から始まる文字列#aabbcc、例えばを、rgb(.., .., ..,)形式へと変換するためのメソッド\r
+   * initメソッドで使われる*/\r
+  toRGB: function(rgbColor) {\r
+           var keyword = this._keywords[rgbColor];\r
            if (keyword) {\r
              return "rgb(" + keyword.join(", ") + ")";\r
            }\r
@@ -1752,7 +2011,28 @@ base("$calcMode").up("$attribute").mix( {
               return s;\r
            }\r
            return rgbColor;\r
-        };\r
+        }\r
+\r
+/*initメソッドに追加処理\r
+ * onメソッドについては、base.jsを参照のこと*/\r
+} ).on ("init", function(ele) {\r
+  var to, \r
+      keyTime = 0,\r
+      /*関数toRGBはrgbColor形式への変換処理で使う*/\r
+      toRGB = function(x) { return x; },\r
+      isColor = /^(?:fill|stroke|stop-color|color)$/.test(this.attrName);\r
+  if (isColor) {\r
+    /*通常は、小数点以下の桁数を既定値の1桁とする\r
+     *RGB形式では補間に、小数を使わないため、0桁に設定\r
+     * (なお、この作業は、setKeyメソッドの前に済ませておく必要がある)*/\r
+    this.degits = 0;\r
+    /*たとえば、fill属性などである場合には、rgbColor形式への変換処理をする*/\r
+    toRGB = this.toRGB.bind(this);\r
+  }\r
+  if (ele) {\r
+    this.mode = ele.getAttributeNS(null, "calcMode") || "linear";\r
+    this.setString();\r
+    to = this.setKey(ele);\r
   }\r
   if (to) {\r
     this.funcs = to.map( function(x) {\r
@@ -1837,7 +2117,8 @@ base("$calcMode").up("$attribute").mix( {
    /*後の_setFrameメソッドで使うダミー*/\r
    __setAttribute: function(){},\r
    \r
-   _setFrame: function(currentFrame) {\r
+   _setFrame: function($list) {\r
+    var currentFrame = $list.currentFrame;\r
      /*__transformListの中で、自分より後の項目に再生中のものがあれば、\r
       *アニメーションを再生させないで、後に続く項目に任せる*/\r
      var list = this.element.__transformList,\r
@@ -1856,32 +2137,34 @@ base("$calcMode").up("$attribute").mix( {
      this.setAttribute = isPostActive ? this.__setAttribute\r
                                     : this.$animateElement.setAttribute;\r
      /*上書きされたメソッドを呼び出す*/\r
-     this.$animateElement._setFrame.call(this, currentFrame);\r
+     this.$animateElement._setFrame.call(this, $list);\r
    },\r
    \r
-   _setEndFrame: function(currentFrame) {\r
+   _setEndFrame: function($list) {\r
      var list = this.element.__transformList;\r
-     if (!this.checkEnd(currentFrame) || (this.fill !== "remove") || !list) {\r
+     if (!list) {\r
        return;\r
      }\r
-     if (!this.isSum) {\r
-       /*凍結処理をしないで、かつ、元の状態に戻して、効果が出ないようにする*/\r
-       list[this.numberOfList]\r
-        && (list[this.numberOfList].isPlaying = false);\r
-        for (var i = 0;i<list.length;++i) {\r
-          var listi = list[i];\r
-          if (listi.isPlaying || !listi.isRemove) {\r
-            /*他のanimateTransform要素が活性化しているか、凍結処理が必要ならば、\r
-             * 属性の初期化はしない*/\r
-            return;\r
-          }\r
-        }\r
-       this.removeAttribute();\r
+     var item = list[this.numberOfList];\r
+     if (this.fill === "remove") {\r
+       if (!item) {\r
+         return;\r
+       } else if (!this.isSum) {\r
+         /*凍結処理をしないで、かつ、元の状態に戻して、効果が出ないようにする*/\r
+         item.isPlaying = false;\r
+       } else {\r
+         /*凍結処理をしないで、かつ、効果を出すが、変形させないようにする*/\r
+         item.value = "translate(0)";\r
+       }\r
      } else {\r
-       /*凍結処理をしないで、かつ、効果を出すが、変形させないようにする*/\r
-       list[this.numberOfList]\r
-        && (list[this.numberOfList].value = "translate(0)");\r
+       /*凍結処理をする\r
+        * 自前のtocallメソッドはvalueプロパティを書きかえてしまうため、\r
+        * 上書きメソッドを呼び出す*/\r
+       item.value = this.type+ "(" \r
+                                      +this.$animateElement.tocall.call( this, this.getAdvanceEnd($list) )+ ")";\r
      }\r
+     this.setAttribute( this.joinList(this.defaultValue || "") );\r
+     item = void 0;\r
    },\r
    \r
     /*setAddメソッドのオーバライド\r
@@ -1910,15 +2193,16 @@ base("$calcMode").up("$attribute").mix( {
      /*isPlayingプロパティはアニメーション再生終了後でもtrueとなるので注意*/\r
      parent.__transformList.push( {isPlaying: false,\r
                                    value: "translate(0)",\r
-                                   isSum: this.isSum,\r
-                                   isRemove: (this.fill === "remove")\r
+                                   isSum: this.isSum\r
                                   } );\r
    }\r
   } )\r
   .up("$motionElement")\r
   .mix( function() {\r
-    /*setRFrameメソッドを再定義*/\r
+    /*$animateTransformElementオブジェクトのでは、うまくいかないため、\r
+     * setRFrameとsetEndFrameメソッドを再定義*/\r
     this._setFrame = this.$animateElement._setFrame;\r
+    this._setEndFrame = this.$animateElement._setEndFrame;\r
   })\r
   .mix( {\r
     numberOfList: -1,\r
@@ -2017,7 +2301,6 @@ base("$calcMode").up("$attribute").mix( {
     this.rotate = this.getAttr("rotate", "0");\r
     this.path = this.path.cloneNode(true);\r
     var mpath = ele.getElementsByTagNameNS(this.path.namespaceURI, "mpath");\r
-    var list = this.element.__transformList;\r
     /*$animateは後で、プロパティを書き換えるために使う。tocallメソッドも参照*/\r
     var $animate = this.$animateElement;\r
     if (mpath.length) {\r
@@ -2032,124 +2315,6 @@ base("$calcMode").up("$attribute").mix( {
     }\r
   } );\r
 \r
-/*$svgEventオブジェクトは、SVGEvent発火を監視するためのオブジェクト*/\r
-base("$frame").up("$svgEvent").mix( {\r
-  /*イベントのスケジュール記録*/\r
-  first: null,\r
-  \r
-  /*タイムラインの最後のキャッシュ*/\r
-  lastTimeLine: null,\r
-  \r
-  /*setTimeTable メソッドはスケジュールの記録をつけるためのメソッド*/\r
-  setTimeTable: function () {\r
-    var timelines = this.timelines;\r
-      for (var i=0, obj = null;i<timelines.length;++i) {\r
-        if (!timelines[i].target || !timelines[i].isResolved) {\r
-          /*一度スケジュールを作成して実行したり、未解決だったタイムラインは、処理しない*/\r
-          continue;\r
-        }\r
-        /*タイムラインから、beginEventとendEventを発火するスケジュールを作成*/\r
-        var timeline = timelines[i],\r
-            begin = timeline.begin,\r
-            target = timeline.target,\r
-            simpleDur = timeline.simpleDuration,\r
-            activeTime = timeline.activeTime;\r
-        var first = {\r
-              frame: begin,\r
-              eventType: "begin",\r
-              target: target,\r
-              next: {\r
-                frame: begin+activeTime,\r
-                eventType: "end",\r
-                target: target,\r
-                next: null\r
-              }\r
-            };\r
-        if (obj) {\r
-          obj.next.next = first;\r
-        } else if (!this.first) {\r
-          /*firstプロパティがすでにある場合、書き換えない*/\r
-          this.first = first;\r
-        } else {\r
-          /*firstプロパティがある場合、そのリストのリンクをたどっていって、\r
-           * 最後の尾を変数firstとつなげる*/\r
-          var fst = this.first;\r
-          while(fst.next) {\r
-            fst = fst.next;\r
-          }\r
-          fst.next = first;\r
-        }\r
-        obj = first;\r
-        if (simpleDur && (activeTime !== simpleDur)) {\r
-          /*活動継続時間と単純持続時間が異なるとき、repeatイベントを設定\r
-           * ただし、repeatイベントはendイベントが発生する前に起きるものと仮定*/\r
-          for (var a = first, m= begin + simpleDur, n=1;m < begin + activeTime; m+=simpleDur, ++n) {\r
-            a.next = {\r
-              frame: m,\r
-              eventType: "repeat",\r
-              target: target,\r
-              /*リピートの回数 (n >= 1)*/\r
-              count: n,\r
-              next: a.next\r
-            };\r
-            a = a.next;\r
-          }\r
-        }\r
-        /*一度、スケジュールを作っておいたタイムラインは次回から処理しないようにする*/\r
-        timeline.target = null;\r
-      }\r
-    timelines = obj = first = begin = target = simpleDur = activeTime = void 0;\r
-  },\r
-  \r
-  $frame: base("$frame"),\r
-  \r
-  setFrame: function (num) {\r
-    var timelines = this.timelines,\r
-        lastTimeLine = timelines[timelines.length-1],\r
-        s = this.$frame.setFrame(num);\r
-    /*キャッシュのlastTimeLineプロパティを使って、再びスケジュールの計算をさせないようにする*/\r
-    if (this.lastTimeLine !== lastTimeLine) {\r
-      this.lastTimeLine = lastTimeLine;\r
-      this.setTimeTable();\r
-    }\r
-    /*スケジュールに記録しておいたものを実行して、イベントを発火\r
-     * また、発火した場合は記録から取り除いて、次回から再び発火しないようにする*/\r
-    var obj = this.first,\r
-        cobj = obj,\r
-        floor = Math.floor;\r
-    while(obj) {\r
-      var frame = obj.frame,\r
-          target = obj.target\r
-          detail = 0;\r
-      if (frame <= num) {\r
-        /*IE11ではSVGEventsやDOMEventsを使うと問題が起きるため、MouseEventsで代用する*/\r
-        if (obj.eventType === "repeat") {\r
-          /*detailは何回リピートしたか*/\r
-          detail = obj.count;\r
-        }\r
-        /*ポインタの連結を変更することで、リストからobj を除去\r
-         * 一度除去したものはイベントを発生させない*/\r
-        cobj.next = obj.next;\r
-        if (this.first === obj) {\r
-          cobj = obj.next;\r
-          this.first = cobj;\r
-        } else {\r
-          cobj = obj;\r
-        }\r
-        var evt = target.ownerDocument.createEvent("MouseEvents");\r
-        evt.initMouseEvent(obj.eventType+"Event" ,true, true, window, detail, 0, 0, 0, 0, false, false, false, false, 0, target);\r
-        target.dispatchEvent(evt);\r
-      } else {\r
-        /*next プロパティを書き換えるためのobj オブジェクトのキャッシュ*/\r
-        cobj = obj;\r
-      }\r
-      obj = obj.next;\r
-    }\r
-    obj = num = first = frame = target = cobj = detail = void 0;\r
-    return s;\r
-  }\r
-} );\r
-\r
 function getDocument() \r
 {\r
   var svg = document.getElementsByTagName("object"),\r
@@ -2165,7 +2330,7 @@ function getDocument()
   var id = __step(),\r
       idstop = function() {\r
         /*アニメーションを中止する関数*/\r
-        window.cancelAnimationRequest && cancelAnimationRequest(id);\r
+        window.cancelAnimationFrame && cancelAnimationFrame(id);\r
       };\r
   base("$frame").on("pauseAnimation", idstop);\r
   window.addEventListener("unload", idstop);\r
@@ -2213,26 +2378,23 @@ if (!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Anim
        handle: null\r
       };\r
     (function(frame) {\r
-      var $frame = base("$frame"),\r
-          $f = $frame.$svgEvent,\r
-          _cancel = cancel; /*cancelのエイリアス*/\r
-      _cancel.handle = requestAnimationFrame(step);\r
-      function step() {\r
-        if (!$frame.isPaused) {\r
+      var _cancel = cancel; /*cancelのエイリアス*/\r
+      var step = function () {\r
+        if (!this.isPaused) {\r
           frame++;\r
           try {\r
-            $f.setFrame(frame);\r
-            $f.$endFrame.setFrame(frame);\r
+            this.setFrame(frame);\r
           } catch(e) {\r
           }\r
           _cancel.handle = requestAnimationFrame(step);\r
         }\r
-      };\r
+      }.bind(base("$frame"));\r
+      _cancel.handle = requestAnimationFrame(step);\r
     })(-1);\r
     return cancel;\r
   } else {\r
     setInterval( (function(frame) {\r
-      var $f = base("$frame").$svgEvent;\r
+      var $f = base("$frame");\r
       return function () {\r
         frame++;\r
         $f.setFrame(frame);\r
diff --git a/sie.js b/sie.js
index 9c447df..cc15319 100755 (executable)
--- a/sie.js
+++ b/sie.js
@@ -22,4 +22,4 @@
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
-function getDocument(){function t(t){function e(e,n){for(var r=t.getElementsByTagNameNS(i,n),s=0;s<r.length;++s)e.up().init(r.item(s));r=e=void 0}var n=base("$calcMode").$attribute.$setElement,r=n.$animateElement;e(n,"set"),e(r,"animate"),e(r,"animateColor"),e(r.$animateTransformElement,"animateTransform"),e(r.$animateTransformElement.$motionElement,"animateMotion"),t.defaultView.addEventListener("hashchange",function(){var e=t.defaultView.location.hash.slice(1);t.getElementById(e).beginElement()})}var e=document.getElementsByTagName("object"),i="http://www.w3.org/2000/svg";if(e)for(var n=0;n<e.length;++n)t(e[n].getSVGDocument());t(document);var r=__step(),s=function(){window.cancelAnimationRequest&&cancelAnimationRequest(r)};base("$frame").on("pauseAnimation",s),window.addEventListener("unload",s)}function __step(){if(!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Animation","1.1")||window.navigator.userAgent.toLowerCase().indexOf("edge")){if(window.requestAnimationFrame&&requestAnimationFrame){var t={handle:null};return function(e){function i(){if(!n.isPaused){e++;try{r.setFrame(e),r.$endFrame.setFrame(e)}catch(t){}s.handle=requestAnimationFrame(i)}}var n=base("$frame"),r=n.$svgEvent,s=t;s.handle=requestAnimationFrame(i)}(-1),t}setInterval(function(t){var e=base("$frame").$svgEvent;return function(){t++,e.setFrame(t)}}(-1),1)}}!function(){var t={obj:{up:function(t){var e=Object.create(this);return t?(this[t]=e,e.up=this.up):this.$1=e,e},mix:function(e){if(!e)throw new Error("No arguments error");if("function"!=typeof e){var i=t.__ng_;for(var n in e)i[n]||(this[n]=e[n]);n=i=void 0}else e.call(this,this);return this},on:function(t,e){if(!t)throw new Error("No arguments error");if(/^(?:up|on|mix|of)$/.test(t))throw new Error("Invalid method name error");if("function"!=typeof e)throw new Error("Not support arguments type");var i=this._eventList__,n=this[t];if(this._eventList__){if(!this.hasOwnProperty("_eventList__")){var r=[];r._parent=i,i=this._eventList__=r,r=void 0}}else i=this._eventList__=[];return this[t]&&n.isOn||("function"==typeof n&&(i.push({name:t,func:n}),i._parent=null),this[t]=function(){var e,i=this._eventList__,n=t,r=null,s=null,a=!1;for(i._child=null;e=i._parent;)e._child=i,i=e;for(;i;){for(var l=0,o=i.length;o>l;++l)i[l].name===n&&(r=i[l].func.apply(this,arguments),a||(s=r,a=!0));i=i._child}return i=r=n=a=void 0,s},this[t].isOn=!0),i.push({name:t,func:e}),i=n=e=void 0,this},__args:null,__app:null,of:function(t){if(!t)throw new Error("No arguments error");if(this.hasOwnProperty("__of"))throw new Error("Reset error");var e=this.__args||[];for(var i in t)t.hasOwnProperty(i)&&"call"!==i&&(e[i]||e.push(i),e[i]=this[i]=t[i]);return t.call&&(this.__app={call:t.call}),this.__args=e,this.__of=1,e=i=t=void 0,this},call:function(){if(!this.__app)return this;var t=this.__args,i=this.call;this.call=e;for(var n=0,r=t.length;r>n;++n){var s=t[n],a=this[s];a&&a.call&&(this[s]=a.call(this))}return this.call=i,t=s=a=i=void 0,this.__app.call.apply(this,arguments)}}},e=function(){return this},i={};base=function(e){var n=t,r=i;if(e){if(r[e])return r[e];var s=Object.create(n.obj);return this[e]=r[e]=s,s[e]=s,s}throw new Error("No arguments error")};var n={},r=Object.prototype;for(var s in r)n[s]=!0,i[s]=null;n.constructor=!1,t.__ng_=n,n=r=void 0,base.free=function(){delete t.obj,t=i=e=void 0},Object.create||(Object.create=function(t){var e=function(){};return e.prototype=t,new e})}(),base("$frame").mix({fpms:.024,timelines:[],begin:0,activeTime:Number.MAX_VALUE,currentFrame:0,startAnimation:function(){__step()},isPaused:!1,pauseAnimation:function(){this.isPaused=!0},setFrame:function(t){if(!(t<this.begin||t>=this.begin+this.activeTime)){this.currentFrame=t;for(var e=this.timelines,i=0;i<e.length;++i)e[i]!==this&&e[i].setFrame(t)}},addLine:function(t){if(!t||!t.begin&&0!==t.begin||!t.activeTime&&0!==t.activeTime)return!1;var e=this.timelines;return e.indexOf(t)>=0&&this.removeLine(t),e.push(t),e=void 0,!0},removeLine:function(t){var e=this.timelines,i=e.indexOf(t);i>-1&&e.splice(i,1),e=i=void 0}}).mix(function(t){t.up("$endFrame").mix({timelines:[]}),t.up("$begin").mix({string:"",isResolved:!1,eventTarget:document.documentElement,currentFrame:0,eventOffset:0,repeat:0,accessKey:"",trim:function(t){return t.replace(/[\s\n]+/g,"")},offset:function(t){function e(){return r(1e3,/[\d.]+s$/,/[\d.]+$/)}function i(){return r(6e4,/[\d.]+min$/,/\d\d:[^:]+$/)}function n(){return r(36e5,/\d+:\d\d:/,/[\d.]+h$/)}function r(e,i,n){return e*(a(t.match(i)||"0")||a(t.match(n)||"0"))}t=t||"0";var s=t.charAt(0),a=parseFloat,l=a(t.match(/[\d.]+ms$/)||"0")+e()+i()+n();return"-"===s&&(l*=-1),s=a=e=i=n=void 0,l},event:function(t){if(t=t||"",/[\+\-]/.test(t)&&(t=t.slice(0,t.search(/[\+\-]/))),t.indexOf(".")>-1){var e=t.split(".");return{id:e[1]&&e[0],event:e[0]&&e[1]}}return{id:"",event:t}},parse:function(){this.begin=0,this.isResolved=!1;var t,e=this.trim(this.string),i=e.search(/[\+\-]/),n=null;if("indefinite"===e?this.begin=Number.MAX_VALUE:i>0?(this.begin=this.offset(e.slice(i)),n=this.event(e)):/[^\+\-\d]/.test(e.charAt(0))?n=this.event(e):(this.begin=this.offset(e),this.isResolved=!0),this.repeat=/repeat\((\d+)\)/.test(e)?+RegExp.$1:0,this.accessKey=/accessKey\(([^\)]+?)\)/.test(e)?RegExp.$1:"",this.begin=Math.floor(this.begin*this.fpms),"indefinite"===e);else if(n)if(t=n.id?this.eventTarget.ownerDocument.getElementById(n.id):this.eventTarget,this.eventOffset=this.begin,this.repeat>0)t&&t.addEventListener("repeatEvent",function(t){t.detail===this.repeat&&this.listener(t)}.bind(this),!0);else if(this.accessKey)document.documentElement.addEventListener("keydown",function(t){t["char"]===this.accessKey&&this.listener(t)}.bind(this),!1);else{var r=/^(?:begin|end|repeat)$/.test(n.event)?n.event+"Event":n.event;t&&t.addEventListener(r,this.listener.bind(this),!1)}else this.$frame=this;return s=n=e=i=t=void 0,this},listener:function(t){this.begin=this.eventOffset+this.$frame.currentFrame;var e=this.$activate;e.begin=this.begin,this.activeTime=e.call()||Number.MAX_VALUE,this.simpleDuration=e.simpleDur,e=void 0,this.$frame.addLine(this),this.isResolved=!0}}).up("$activate").of({dur:"indefinite",end:t.$begin.up("$end"),repeatCount:null,repeatDur:null,simpleDur:function(){return"indefinite"!==this.dur&&this.dur?Math.floor(this.offset(this.dur)*this.fpms):null},min:"0",max:"indefinite",resolvedTime:function(){return Date.now()},call:function(){function t(){return a?!0:o?!1:!!(!l&&!u||r&&!u||s&&!h||r&&s)}var e,i="indefinite",n=this.simpleDur,r=this.repeatCount===i,s=this.repeatDur===i,a=this.end===i,l=n||0===n,o=this.end||0===this.end,h=this.repeatCount||0===this.repeatCount,u=this.repeatDur||0===this.repeatDur,m=[],f=Math.floor(this.offset(this.min)*this.fpms),c=this.max===i?null:Math.floor(this.offset(this.max)*this.fpms);if(t())return c?c:null;if(l&&this.repeatCount&&!r&&m.push(n*this.repeatCount),u&&!s&&m.push(Math.floor(this.offset(this.repeatDur)*this.fpms)),o&&!a&&m.push(this.end-this.begin),!l||h||u||m.push(n),i=n=r=isIndefRepeatDurindef=l=o=u=h=t=void 0,1===m.length)e=m[0];else{if(!(m.length>1))return null;e=Math.min.apply(Math,m)}return c&&f>c?e:(f&&f>e&&(e=f),c&&e>c&&(e=c),e)}}),t.$begin.$end.of({call:function(){return this.string?(this.parse(this.string),this.isResolved?this.begin:"indefinite"):null}}).mix({listener:function(t){this.begin<=0&&this.removeLine(this.$begin),this.begin=this.eventOffset+this.$frame.currentFrame;var e=this.$begin.$activate;e.end=this.begin,this.$begin.activeTime=e.call(),this.isResolved=!0,e=void 0}})}),base("$from").of({string:"",numList:function(){var t=this.string.match(/[\-\+]?[\d\.]+(?:[eE][\-\+]?[\d\.]+)?/g)||[];if(t)for(var e=0;e<t.length;++e)t[e]=parseFloat(t[e]);return t},strList:function(){return this.string.replace(/\d[eE][\-\+\d]/g,"").match(/[^\d\-\+\.]+/g)},from:base("$from").up().mix({from:null}),call:function(){if(this.numList.string=this.string,this.numList.length&&0===this.additive[0]&&0===this.accumulate[0]){for(var t=[],e=[],i=0;i<this.numList.length;++i)t[i]=e[i]=0;this.additive=t,this.accumulate=e}if(!this.string||!this.numList.length||!this.strList)return this.numList;var n=this.numList.length<this.strList.length;return/^[\-\+]?[\d\.]/.test(this.string)&&!n&&this.strList.unshift(""),/\d$/.test(this.string)&&!n&&this.strList.push(""),this.numList}}).mix({degit:0,additive:[0],accumulate:[0],advance:function(t){if(0>t||t>1)throw new Error("An Invalid Number Error");if(!this.string)return"";if(!this.from.length)return 1===t?this.string.trim():this.from.string.trim();for(var e="",i=this.numList,n=this.strList,r=this.from,s=this.degit,a=this.additive,l=this.accumulate,o=0,h=i.length;h>o;++o)e+=(t*i[o]+(1-t)*r[o]+a[o]+l[o]).toFixed(s),n&&(e+=n[o+1]);return e=(n?n[0]:"")+e,i=n=r=o=h=s=a=l=void 0,e.trim()},distance:function(t){if(!t)return 0;var e=this.call(),i=t.call?t.call():t,n=0;if(!e||!i)return 0;for(var r=0,s=e.length;s>r;++r)n+=(e[r]-i[r])*(e[r]-i[r]);return Math.sqrt(n)},setAdditive:function(t){if(!t)return 0;var e=this.$from.up();return e.string=t,this.additive=e.call()},setAccumulate:function(t){return!t||isNaN(t)?0:this.accumulate=this.numList.map(function(e){return e*t})}}).up("$to").from=null,base("$calcMode").mix({mode:"linear",keyTime:1,keySplines:null,_f:function(t){var e=this.keyTime;if(0===e&&t)t=0;else{if(!e||!isFinite(e))return this.string;t/=e,t=t>1?Math.floor(t):t}return e=void 0,isNaN(t)?this.string:this.to.advance(t)},funcForDiscrete:function(t){return isNaN(t)?this.string:1===t?this.to.string:this.to.advance(0)}}).of({norm:1,string:"",call:function(){var t=this._f.bind(this);if("linear"===this.mode)return this.to.call(),t;if("paced"===this.mode)return this.keyTime=this.to.distance(this.to.from)/this.norm,t;if("spline"===this.mode){var e=this.keySplines,i=function(t){return Math.PI};if(i.isNotAnimate=!0,!e)return i;for(var n=0,r=NaN;n<e.length;++n){if(r=e[n],isNaN(r))return i;if(0>r||r>1)return i}this.to.call();var s=e[0],a=e[1],l=e[2],o=e[3],h=1,u=1,m=h-3*(l-s),f=3*(l-2*s),c=3*s,d=u-3*(o-a),g=3*(o-2*a),v=3*a,p=Math.qubicnewton;if(!(0!==s&&1!==s||0!==a||1!==l&&0!==l||1!==o))return this.to.call(),t;var b=this.keyTime;return(b||isFinite(b))&&(m*=b,f*=b,c*=b,d*=b,g*=b,v*=b),b=e=s=a=l=o=h=u=void 0,function(e){var i=p(m,f,c,-e,e);return t(d*i*i*i+g*i*i+v*i)}}return"discrete"===this.mode?(this.to.call(),this.funcForDiscrete.bind(this)):void 0}}).to=base("$from").$to,Math.qubicnewton=function(t,e,i,n,r){var s=1e-15,a=t*r*r*r+e*r*r+i*r+n;if(0===a)return r;for(var l=0;100>l;l=l+1|0){var o=3*t*r*r+2*e*r+i;if(!o||s>a&&a>-s)return a=s=void 0,r;r-=a/o,a=t*r*r*r+e*r*r+i*r+n}return r},base("$calcMode").up("$attribute").mix({element:null,$from:base("$from").up(),attrName:"",attrNameSpace:null,defaultValue:"",isDefault:!1,isCSS:!1,mode:"linear",getAttr:function(t,e){var i=null;t.indexOf("xlink:")>-1&&(i="http://www.w3.org/1999/xlink");var n=this._ele.getAttributeNS(i,t);if(this.element){var r=this.element.ownerDocument.defaultView;if("inherit"===n)return r.getComputedStyle(this.element.parentNode,"").getPropertyValue(this.attrName);if("currentColor"===n)return r.getComputedStyle(this._ele,"").getPropertyValue("color")}return n||e},_ele:document.documentElement,hasAttrValues:function(){var t=this._ele;return t?t.hasAttribute("from")||t.hasAttribute("to")||t.hasAttribute("by")||t.hasAttribute("values"):!1},__cacheAttr:"",setAttribute:function(t){var e=this.attrName;if(e&&this.__cacheAttr!==t){this.__cacheAttr=t;var i=this.element;this.isCSS?i.style.setProperty(e,t,""):i.setAttributeNS(this.attrNameSpace,e,t),t=e=i=void 0}},removeAttribute:function(){var t=this.attrName;if(t){var e=this.element;this.isDefault?this.setAttribute(this.defaultValue):(e.removeAttributeNS(this.attrNameSpace,t),this.isCSS&&e.style.setProperty(t,this.defaultValue,"")),this.__cacheAttr="",value=t=e=void 0}},push:function(t){function e(t,e){return"indefinite"!==t.string?function(){}:function(){t.listener({timeStamp:Date.now()});var i=this.ownerDocument.createEvent("MouseEvents");i.initMouseEvent(e+"Event",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,this),this.dispatchEvent(i)}}if(!t||!t.hasAttribute)return null;this.__cacheAttr="",this.element=t.parentNode||null;var i;if((i=t.getAttributeNS(null,"targetElement"))&&(this.element=t.ownerDocument.getElementById(i)),(i=t.getAttribute("xlink:href"))&&(this.element=t.ownerDocument.getElementById(i.slice(1))),this._ele=t,!this.hasAttrValues())return null;this.attrName=this.getAttr("attributeName","");var n=this.attrName,r=this.getAttr("attributeType","auto"),s=this.element&&this.element.ownerDocument.defaultView.getComputedStyle(this.element,"");("CSS"===r||"auto"===r&&this.element&&s.getPropertyValue(n)&&!/^(width|height|transform)$/.test(n))&&(this.isCSS=!0),n.indexOf("xlink")>-1&&(this.attrNameSpace="http://www.w3.org/1999/xlink");var a=this.element;a&&(this._ele=a,this.isDefault=a.hasAttributeNS(this.attrNameSpace,n),this.defaultValue=this.getAttr(n,s.getPropertyValue(n)),this._ele=t);var l=base("$frame"),o=l.$begin,h=o.up().mix({target:t,eventTarget:this.element||o.eventTarget,string:this.getAttr("begin","0"),$activate:o.$activate.up().mix({dur:this.getAttr("dur",null),end:o.$end.up().mix({eventTarget:this.element||o.eventTarget,string:this.getAttr("end",null)}),repeatCount:this.getAttr("repeatCount",null),repeatDur:this.getAttr("repeatDur",null),min:this.getAttr("min","0"),max:this.getAttr("max","indefinite")})}).parse();if(h.$activate.end.$begin=h,t.beginElement=e(h,"begin"),t.endElement=e(h.$activate.end,"end"),h.isResolved){var u=h.begin;h.listener({timeStamp:Date.now()}),h.begin=u}return h.timelines=[],o=t=i=void 0,h},setValues:function(t,e,i,n){var r=this.$from,s=[this.up().mix({to:r.up().mix({from:r.up()})})],a=s[0].to;if(t=t&&t.split(";"),t&&t.length){s=[];for(var l=1;l<t.length;++l)s.push(this.up().mix({to:r.up().mix({from:r.up()})})),a=s[s.length-1].to,a.string=t[l],a.from.string=t[l-1]}else if(i)a.string=i,a.from.string=e||"0";else{if(!n)return null;a.string=n,a.from.string=e||"0";for(var o=a.call(),h=a.from,l=0;l<o.length;++l)o[l]+=h[l]}return r=a=o=h=void 0,s},setKey:function(t){this._ele=t;var e,i,n=this.setValues(this.getAttr("values",null),this.getAttr("from",null),this.getAttr("to",null),this.getAttr("by",null)),r=this.getAttr("keyTimes",null),s=this.getAttr("keySplines",null),a=s&&s.split(";"),l="discrete"===this.mode;if(!l&&r&&n){if(e=this.$from.numList.call({string:r}),e.length&&0!==e[0])return null;if(e.length&&e.length!==n.length+1)return null;for(var o=0;o<n.length;++o)n[o].keyTime=e[o+1]-e[o],a&&(i=this.$from.numList.call({string:a[o]}),n[o].keySplines=i.length?i:null)}else if(!l&&n)for(var h=1/n.length,o=0;o<n.length;++o)n[o].keyTime=h,a&&(i=this.$from.numList.call({string:a[o]}),n[o].keySplines=i.length?i:null);else if(n){if(r){if(e=this.$from.numList.call({string:r}),e.length&&0!==e[0])return null;if(e.length&&e.length!==n.length+1)return null;for(var o=0;o<n.length;++o)n[o].keyTime=e[o+1]-e[o]}else for(var h=1/(n.length+1),o=0;o<n.length;++o)n[o].keyTime=h;n.push(n[n.length-1].up().mix(function(){e&&(this.keyTime=1-e[e.length-1])}).of({call:function(){return function(t){return isNaN(t)?this.string:this.to.advance(1)}.bind(this)}}))}if("paced"===this.mode){var u=0;n.forEach(function(t){u+=t.to.distance(t.to.from)}),n.forEach(function(t){t.norm=u})}return t=r=e=h=a=void 0,n}}).up("$setElement").mix({to:"",_setFrame:function(t){this.state="playing",this.setAttribute(this.to)},state:"idling",timeline:base("$frame").$begin,checkEnd:function(t){var e=this.timeline,i=e.begin+e.activeTime;return!e.isResolved||isNaN(i)?(e=t=void 0,!1):(t<e.begin||t>=i)&&"playing"===this.state?(this.state="idling",e=t=void 0,!0):(e=t=void 0,!1)},_setEndFrame:function(t){this.checkEnd(t)&&"remove"===this.fill&&this.removeAttribute()},tocall:function(){},init:function(t){var e=this.push(t);t&&t.getAttributeNS&&(this._ele=t,this.to=this.getAttr("to",""),this.fill=this.getAttr("fill","remove"));var i=this.element;e&&i&&(this.timeline=e,e.addLine({setFrame:this._setFrame.bind(this),begin:1,activeTime:1}),base("$frame").$endFrame.addLine({setFrame:this._setEndFrame.bind(this),begin:1,activeTime:1})),this.state="idling",e=i=void 0}}).up("$animateElement").mix({funcs:[],tocall:function(t){var e=this.funcs;if("discrete"===this.mode){for(var i="",n=0;n<e.length;++n){var r=e[n];t>=r.startKeyTime&&(i=r(t))}return t=e=r=void 0,i}for(var n=0;n<e.length;++n){var r=e[n];if(r.endKeyTime>=t)return r(t-r.startKeyTime)}return e=n=r=void 0,""},_setFrame:function(t){var e=this.timeline,i=e.simpleDuration,n=i?(t-e.begin)%i/i:0;this.setAttribute(this.tocall(n)),this.state="playing",e=i=n=void 0},_setEndFrame:function(t){if(this.checkEnd(t))if("freeze"===this.fill){var e=this.timeline,i=e.simpleDuration;if(i){var n=e.activeTime%i/i;n=n>1?1:n,n=n||1}else n=0;this.setAttribute(this.tocall(n)),e=i=n=void 0}else this.removeAttribute()},getAttr:function(t,e){var i=this.$attribute.getAttr.apply(this,arguments);return"from"===t&&!i&&this.defaultValue?this.defaultValue:i},_keywords:{aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagree:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},setAdd:function(t,e){if("sum"===t.getAttributeNS(null,"additive")){var i=t.parentNode.getAttributeNS(null,this.attrName);t.addEventListener("beginEvent",function(t){e.forEach(function(t){t.to.setAdditive(i)})},!1)}},setAccum:function(t,e){"sum"===t.getAttributeNS(null,"accumulate")&&t.addEventListener("repeatEvent",function(t){e.forEach(function(e){e.to.call(),e.to.setAccumulate(t.detail)})},!1)},setString:function(){/^(?:display|class|edgeMode|(gradient|marker|pattern|maskContent|mask|patternContent|primitive)Units|in|in2|method|mode|operator|preserveAspectRatio|result|spacing|spreadMethod|stitchTiles|target|type|xlink:href|yChannelSelector|color-interpolation|(clip|fill)-rule|cursor|filter|font-(family|stretch|style|variant)|image-rendering|marker-(end|mid|start)|mask|overflow|pointer-events|shape-rendering|stroke-(linecap|linejoin)|text-(anchor|decoration|rendering)|visibility)$/.test(this.attrName)&&(this.mode="discrete")},degits:1,setValues:function(){var t=this.$attribute.setValues.apply(this,arguments),e=this.degits;return t&&t.forEach(function(t){t.to.degit=e}),e=void 0,t}}).on("init",function(t){var e=/^(?:fill|stroke|stop-color|color)$/.test(this.attrName);e&&(this.degits=0);var i,n=0,r=function(t){return t};if(t&&(this.mode=t.getAttributeNS(null,"calcMode")||"linear",this.setString(),i=this.setKey(t)),e){var s=this._keywords;r=function(t){var e=s[t];if(e)return"rgb("+e.join(", ")+")";if(t&&"#"===t[0]){var i="rgb(",n=parseInt;if(t.length<5)var r=t[1],a=t[2],l=t[3],t="#"+r+r+a+a+l+l;return t.match(/\#(\w{2})(\w{2})(\w{2})/),i+=n(RegExp.$1,16)+", "+n(RegExp.$2,16)+", "+n(RegExp.$3,16)+")",r=a=l=void 0,i}return t}}i&&(this.funcs=i.map(function(t){t.to.string=r(t.to.string),t.to.from.string=r(t.to.from.string);var e=t.call();return e.startKeyTime=n,n=e.endKeyTime=n+t.keyTime,e}).filter(function(t){return this.timeline.isResolved?"spline"!==this.mode||!t.isNotAnimate:!0},this),this.setAdd(t,i),this.setAccum(t,i)),s=r=e=void 0}).up("$animateTransformElement").mix({numberOfList:-1,type:"translate",attrName:"transform",isCSS:!1,isSum:!1,degits:15,joinList:function(t){for(var e=this.element.__transformList,i=0;i<e.length;++i){var n=e[i],r=n.value;n.isSum?t+=" "+r:n.isPlaying&&(t=r)}return t.trim()},tocall:function(t){if(this.numberOfList<0)throw new Error("Number of The List Error");var e=this.element.__transformList[this.numberOfList];return e.value=this.type+"("+this.$animateElement.tocall.call(this,t)+")",e.isPlaying=!0,e.isSum=this.isSum,this.joinList(this.defaultValue||"")},__setAttribute:function(){},_setFrame:function(t){var e=this.element.__transformList,i=!1,n=e.length;if(1!==n&&this.numberOfList<n-1)for(var r=this.numberOfList+1;n>r;++r)e[r].isPlaying&&(i=!0);this.setAttribute=i?this.__setAttribute:this.$animateElement.setAttribute,this.$animateElement._setFrame.call(this,t)},_setEndFrame:function(t){var e=this.element.__transformList;if(this.checkEnd(t)&&"remove"===this.fill&&e)if(this.isSum)e[this.numberOfList]&&(e[this.numberOfList].value="translate(0)");else{e[this.numberOfList]&&(e[this.numberOfList].isPlaying=!1);for(var i=0;i<e.length;++i){var n=e[i];if(n.isPlaying||!n.isRemove)return}this.removeAttribute()}},setAdd:function(){}}).on("init",function(t){if(t&&t.parentNode){this.getAttr=this.$attribute.getAttr,this.type=this.getAttr("type","translate"),this.attrName="transform";var e=this.element;this.isDefault=e.hasAttributeNS(null,"transform"),this.defaultValue=e.getAttributeNS(null,"transform")||"",this.isSum="sum"===this.getAttr("additive","replace"),e.__transformList||(e.__transformList=[],this.numberOfList=-1),this.hasAttrValues()&&this.numberOfList<0&&(this.numberOfList=e.__transformList.length,e.__transformList.push({isPlaying:!1,value:"translate(0)",isSum:this.isSum,isRemove:"remove"===this.fill}))}}).up("$motionElement").mix(function(){this._setFrame=this.$animateElement._setFrame}).mix({numberOfList:-1,mode:"paced",hasAttrValues:function(){return this.$attribute.hasAttrValues.call(this)?!0:this._ele.hasAttribute("path")||this._ele.getElementsByTagNameNS(this.path.namespaceURI,"mpath").length},path:document.createElementNS("http://www.w3.org/2000/svg","path"),rotate:"0",tocall:function(t){return("translate("+this.$animateElement.tocall.call(this,t)+") "+this.joinList(this.defaultValue||"")).trim()},getRotate:function(t,e,i){var n=t.getPathSegAtLength(e),r=t.pathSegList.getItem(n),s=r.pathSegTypeAsLetter,a=Math.PI;if("M"===s){var l=t.pathSegList.getItem(n+1),o=l.pathSegTypeAsLetter;if("M"===o)return"";if("L"===o)return") rotate("+(Math.atan2(l.y-r.y,l.x-r.x)/a*180+i);if("C"===o)return") rotate("+(Math.atan2(l.y1-r.y,l.x1-r.x)/a*180+i)}else{if("L"===s&&n-1>=0){var h=t.pathSegList.getItem(n-1);return") rotate("+(Math.atan2(r.y-h.y,r.x-h.x)/a*180+i)}if("C"===s){var u=t.getPointAtLength(e),m=u.x,f=u.y;return u=t.getPointAtLength(e+1),") rotate("+(Math.atan2(u.y-f,u.x-m)/a*180+i)}}},_tocallForPath:function(t){var e=this.path,i=t*e.getTotalLength(),n=e.getPointAtLength(i),r=0;return"0"===this.rotate?n.x+","+n.y:(r="auto"===this.rotate?0:"auto-reverse"===this.rotate?180:+this.rotate,n.x+","+n.y+this.getRotate(e,i,r))}}).on("init",function(t){if(t&&t.parentNode){this.type="translate",this.isSum=!0,this.mode=this.getAttr("mode","paced"),this.rotate=this.getAttr("rotate","0"),this.path=this.path.cloneNode(!0);var e=t.getElementsByTagNameNS(this.path.namespaceURI,"mpath"),i=(this.element.__transformList,this.$animateElement);if(e.length){var n=t.ownerDocument.getElementById(e[0].getAttributeNS("http://www.w3.org/1999/xlink","href").slice(1));n&&this.path.setAttributeNS(null,"d",n.getAttributeNS(null,"d")),this.$animateElement=i.up().mix({tocall:this._tocallForPath})}else t.hasAttributeNS(null,"path")&&(this.path.setAttributeNS(null,"d",t.getAttributeNS(null,"path")),this.$animateElement=i.up().mix({tocall:this._tocallForPath}))}}),base("$frame").up("$svgEvent").mix({first:null,lastTimeLine:null,setTimeTable:function(){for(var t=this.timelines,e=0,i=null;e<t.length;++e)if(t[e].target&&t[e].isResolved){var n=t[e],r=n.begin,s=n.target,a=n.simpleDuration,l=n.activeTime,o={frame:r,eventType:"begin",target:s,next:{frame:r+l,eventType:"end",target:s,next:null}};if(i)i.next.next=o;else if(this.first){for(var h=this.first;h.next;)h=h.next;h.next=o}else this.first=o;if(i=o,a&&l!==a)for(var u=o,m=r+a,f=1;r+l>m;m+=a,++f)u.next={frame:m,eventType:"repeat",target:s,count:f,next:u.next},u=u.next;n.target=null}t=i=o=r=s=a=l=void 0},$frame:base("$frame"),setFrame:function(t){var e=this.timelines,i=e[e.length-1],n=this.$frame.setFrame(t);this.lastTimeLine!==i&&(this.lastTimeLine=i,this.setTimeTable());var r=this.first,s=r;for(Math.floor;r;){var a=r.frame,l=r.target;if(detail=0,t>=a){"repeat"===r.eventType&&(detail=r.count),s.next=r.next,this.first===r?(s=r.next,this.first=s):s=r;var o=l.ownerDocument.createEvent("MouseEvents");o.initMouseEvent(r.eventType+"Event",!0,!0,window,detail,0,0,0,0,!1,!1,!1,!1,0,l),l.dispatchEvent(o)}else s=r;r=r.next}return r=t=first=a=l=s=detail=void 0,n}}),window.addEventListener&&window.addEventListener("load",getDocument);
\ No newline at end of file
+function getDocument(){function t(t){function e(e,n){for(var r=t.getElementsByTagNameNS(i,n),s=0;s<r.length;++s)e.up().init(r.item(s));r=e=void 0}var n=base("$calcMode").$attribute.$setElement,r=n.$animateElement;e(n,"set"),e(r,"animate"),e(r,"animateColor"),e(r.$animateTransformElement,"animateTransform"),e(r.$animateTransformElement.$motionElement,"animateMotion"),t.defaultView.addEventListener("hashchange",function(){var e=t.defaultView.location.hash.slice(1);t.getElementById(e).beginElement()})}var e=document.getElementsByTagName("object"),i="http://www.w3.org/2000/svg";if(e)for(var n=0;n<e.length;++n)t(e[n].getSVGDocument());t(document);var r=__step(),s=function(){window.cancelAnimationFrame&&cancelAnimationFrame(r)};base("$frame").on("pauseAnimation",s),window.addEventListener("unload",s)}function __step(){if(!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Animation","1.1")||window.navigator.userAgent.toLowerCase().indexOf("edge")){if(window.requestAnimationFrame&&requestAnimationFrame){var t={handle:null};return function(e){var i=t,n=function(){if(!this.isPaused){e++;try{this.setFrame(e)}catch(t){}i.handle=requestAnimationFrame(n)}}.bind(base("$frame"));i.handle=requestAnimationFrame(n)}(-1),t}setInterval(function(t){var e=base("$frame");return function(){t++,e.setFrame(t)}}(-1),1)}}!function(){var t={obj:{up:function(t){var e=Object.create(this);return t?(this[t]=e,e.up=this.up):this.$1=e,e},mix:function(e){if(!e)throw new Error("No arguments error");if("function"!=typeof e){var i=t.__ng_;for(var n in e)i[n]||(this[n]=e[n]);n=i=void 0}else e.call(this,this);return this},on:function(t,e){if(!t)throw new Error("No arguments error");if(/^(?:up|on|mix|of)$/.test(t))throw new Error("Invalid method name error");if("function"!=typeof e)throw new Error("Not support arguments type");var i=this._eventList__,n=this[t];if(this._eventList__){if(!this.hasOwnProperty("_eventList__")){var r=[];r._parent=i,i=this._eventList__=r,r=void 0}}else i=this._eventList__=[];return this[t]&&n.isOn||("function"==typeof n&&(i.push({name:t,func:n}),i._parent=null),this[t]=function(){var e,i=this._eventList__,n=t,r=null,s=null,a=!1;for(i._child=null;e=i._parent;)e._child=i,i=e;for(;i;){for(var l=0,h=i.length;h>l;++l)i[l].name===n&&(r=i[l].func.apply(this,arguments),a||(s=r,a=!0));i=i._child}return i=r=n=a=void 0,s},this[t].isOn=!0),i.push({name:t,func:e}),i=n=e=void 0,this},__args:null,__app:null,of:function(t){if(!t)throw new Error("No arguments error");if(this.hasOwnProperty("__of"))throw new Error("Reset error");var e=this.__args||[];for(var i in t)t.hasOwnProperty(i)&&"call"!==i&&(e[i]||e.push(i),e[i]=this[i]=t[i]);return t.call&&(this.__app={call:t.call}),this.__args=e,this.__of=1,e=i=t=void 0,this},call:function(){if(!this.__app)return this;var t=this.__args,i=this.call;this.call=e;for(var n=0,r=t.length;r>n;++n){var s=t[n],a=this[s];a&&a.call&&(this[s]=a.call(this))}return this.call=i,t=s=a=i=void 0,this.__app.call.apply(this,arguments)}}},e=function(){return this},i={};base=function(e){var n=t,r=i;if(e){if(r[e])return r[e];var s=Object.create(n.obj);return this[e]=r[e]=s,s[e]=s,s}throw new Error("No arguments error")};var n={},r=Object.prototype;for(var s in r)n[s]=!0,i[s]=null;n.constructor=!1,t.__ng_=n,n=r=void 0,base.free=function(){delete t.obj,t=i=e=void 0},Object.create||(Object.create=function(t){var e=function(){};return e.prototype=t,new e})}(),base("$frame").mix({fpms:.024,timelines:[],begin:-Number.MAX_VALUE,activeTime:Number.MAX_VALUE,currentFrame:0,startAnimation:function(){__step()},isPaused:!1,pauseAnimation:function(){this.isPaused=!0},setFrame:function(t){this.currentFrame=t;for(var e=this.timelines,i=0;i<e.length;++i)e[i]!==this&&e[i].setFrame(t)},addLine:function(t){if(!t||!t.begin&&0!==t.begin||!t.activeTime&&0!==t.activeTime)return!1;var e=this.timelines;return e.indexOf(t)>=0&&this.removeLine(t),e.push(t),e=void 0,!0},removeLine:function(t){var e=this.timelines,i=e.indexOf(t);i>-1&&e.splice(i,1),e=i=void 0}}).mix(function(t){t.up("$list").mix({end:0,beginEnd:Number.MAX_VALUE,beginList:{next:null,value:Number.MAX_VALUE},endList:{next:null,value:Number.MAX_VALUE},addBeginList:function(t){return this.beginList={value:t,next:this.beginList}},addEndList:function(t){return this.endList={value:t,next:this.endList}},getMaxList:function(t,e){for(var i=-Number.MAX_VALUE;e;){var n=e.value;t>=n&&n>=i&&(i=n),e=e.next}return i},state:0,WAITING:0,BEGINNING:1,PLAYING:2,ENDING:3,POSTWAITING:4,init:function(){return this.state=this.WAITING,this.begin=0,this},updateState:function(t){if(void 0===t)return this;var e=this.state,i=0,n=1,r=2,s=3,a=4,l=this.getMaxList(t,this.beginList);if(l===-Number.MAX_VALUE)return e>a&&(this.state=n),this;var h=this.getMaxList(t,this.endList),o=e===i,u=this.begin;if(!l&&o)this.begin=0,this.state=n;else if(o||e===a)l>u&&(this.state=n,this.begin=l);else if(e===n)h>=u?(this.state=s,h>0&&(this.end=h),this.beginEnd=0):this.state=r;else if(e===r){var m=u+this.activeTime;h=h>m?m:h,(t>=m||h>=u||l>u)&&(this.state=s,h>0&&(this.end=h,this.beginEnd=h-u))}else e===s?l>u?(this.state=n,this.begin=l):this.state=a:this.state=n;return u=l=h=o=e=void 0,this},_beginListenerList:[],_endListenerList:[],_playListenerList:[],addEvent:function(t,e){var i="_"+t+"ListenerList";this.hasOwnProperty(i)||(this[i]=[]),this[i].push(e)},setFrame:function(t){this.currentFrame=t;var e=this.updateState(t).state;if(2===e)for(var i=this._playListenerList,n=0;n<i.length;++n)i[n](this);else if(1===e){i=this._beginListenerList;for(var n=0;n<i.length;++n)i[n](this);e=this.updateState(t).state}if(3===e){i=this._endListenerList;for(var n=0;n<i.length;++n)i[n](this);1===this.updateState(t).state&&this.updateState(t)}e=i=void 0}}).mix(function(){this.addList=this.addBeginList}),t.up("$begin").mix({string:"",isResolved:!1,eventTarget:document.documentElement,currentFrame:0,eventOffset:0,repeat:0,accessKey:"",trim:function(t){return t.replace(/[\s\n]+/g,"")},offset:function(t){function e(){return r(1e3,/[\d.]+s$/,/[\d.]+$/)}function i(){return r(6e4,/[\d.]+min$/,/\d\d:[^:]+$/)}function n(){return r(36e5,/\d+:\d\d:/,/[\d.]+h$/)}function r(e,i,n){return e*(a(t.match(i)||"0")||a(t.match(n)||"0"))}t=t||"0";var s=t.charAt(0),a=parseFloat,l=a(t.match(/[\d.]+ms$/)||"0")+e()+i()+n();return"-"===s&&(l*=-1),s=a=e=i=n=void 0,l},event:function(t){if(t=t||"",/[\+\-]/.test(t)&&(t=t.slice(0,t.search(/[\+\-]/))),t.indexOf(".")>-1){var e=t.split(".");return{id:e[1]&&e[0],event:e[0]&&e[1]}}return{id:"",event:t}},_parse:function(t){var e,i=t.search(/[\+\-]/),n=null;this.$list.addEndList(Number.MAX_VALUE);if("indefinite"===t?this.begin=Number.MAX_VALUE:i>0?(this.begin=this.offset(t.slice(i)),n=this.event(t)):/[^\+\-\d]/.test(t.charAt(0))?n=this.event(t):(this.begin=this.offset(t),this.isResolved=!0),this.repeat=/repeat\((\d+)\)/.test(t)?+RegExp.$1:0,this.accessKey=/accessKey\(([^\)]+?)\)/.test(t)?RegExp.$1:"",this.begin=Math.floor(this.begin*this.fpms),"indefinite"===t);else if(n){e=n.id?this.eventTarget.ownerDocument.getElementById(n.id):this.eventTarget;var r=this.begin,a=this.$list.addList(Number.MAX_VALUE),l=function(t){a.value=this.begin=r+base("$frame").currentFrame,this.isResolved=!0};if(this.eventOffset=r,this.repeat>0)e&&e.addEventListener("repeatEvent",function(t){t.detail===this.repeat&&l.call(this,t)}.bind(this),!0);else if(this.accessKey)document.documentElement.addEventListener("keydown",function(t){t["char"]===this.accessKey&&l.call(this,t)}.bind(this),!1);else{var h=/^(?:begin|end|repeat)$/.test(n.event)?n.event+"Event":n.event;e&&e.addEventListener(h,l.bind(this),!1)}}else this.$list.addList(this.begin);s=n=t=i=e=void 0},parse:function(){this.begin=0,this.isResolved=!1;var t=this.trim(this.string);if(t.indexOf(";")>-1)for(var e=t.split(";"),i=0;i<e.length;++i)this._parse(e[i]);else this._parse(t);return s=t=void 0,this},updateList:function(){this.$list=this.$list.up();var t=this.$activate=this.$activate.up();return t.end&&(t.end.$list=this.$list),this.activeTime=this.$list.activeTime=t.call()||Number.MAX_VALUE,this.simpleDuration=t.simpleDur,this}}).up("$activate").of({dur:"indefinite",end:t.$begin.up("$end"),repeatCount:null,repeatDur:null,simpleDur:function(){return"indefinite"!==this.dur&&this.dur?Math.floor(this.offset(this.dur)*this.fpms):null},min:"0",max:"indefinite",resolvedTime:function(){return Date.now()},call:function(){function t(){return!!(!a&&!h||r&&!h||s&&!l||r&&s)}var e,i="indefinite",n=this.simpleDur,r=this.repeatCount===i,s=this.repeatDur===i,a=n||0===n,l=this.repeatCount||0===this.repeatCount,h=this.repeatDur||0===this.repeatDur,o=[],u=Math.floor(this.offset(this.min)*this.fpms),m=this.max===i?null:Math.floor(this.offset(this.max)*this.fpms);if(t())return m?m:null;if(a&&this.repeatCount&&!r&&o.push(n*this.repeatCount),h&&!s&&o.push(Math.floor(this.offset(this.repeatDur)*this.fpms)),!a||l||h||o.push(n),i=n=r=isIndefRepeatDurindef=a=isEnd=h=l=t=void 0,1===o.length)e=o[0];else{if(!(o.length>1))return null;e=Math.min.apply(Math,o)}return m&&u>m?e:(u&&u>e&&(e=u),m&&e>m&&(e=m),e)}}),t.$begin.$end.of({call:function(){return this.string?(this.$list.addList=this.$list.addEndList,this.parse(this.string),this.$list.addList=this.$list.addBeginList,this.isResolved?this.begin:"indefinite"):null}}).mix({$list:t.$begin.$list.up()})}),base("$from").of({string:"",numList:function(){var t=this.string.match(/[\-\+]?[\d\.]+(?:[eE][\-\+]?[\d\.]+)?/g)||[];if(t)for(var e=0;e<t.length;++e)t[e]=parseFloat(t[e]);return t},strList:function(){return this.string.replace(/\d[eE][\-\+\d]/g,"").match(/[^\d\-\+\.]+/g)},from:base("$from").up().mix({from:null}),call:function(){if(this.numList.string=this.string,this.numList.length&&0===this.additive[0]&&0===this.accumulate[0]){for(var t=[],e=[],i=0;i<this.numList.length;++i)t[i]=e[i]=0;this.additive=t,this.accumulate=e}if(!this.string||!this.numList.length||!this.strList)return this.numList;var n=this.numList.length<this.strList.length;return/^[\-\+]?[\d\.]/.test(this.string)&&!n&&this.strList.unshift(""),/\d$/.test(this.string)&&!n&&this.strList.push(""),this.numList}}).mix({degit:0,additive:[0],accumulate:[0],advance:function(t){if(0>t||t>1)throw new Error("An Invalid Number Error");if(!this.string)return"";if(!this.from.length)return 1===t?this.string.trim():this.from.string.trim();for(var e="",i=this.numList,n=this.strList,r=this.from,s=this.degit,a=this.additive,l=this.accumulate,h=0,o=i.length;o>h;++h)e+=(t*i[h]+(1-t)*r[h]+a[h]+l[h]).toFixed(s),n&&(e+=n[h+1]);return e=(n?n[0]:"")+e,i=n=r=h=o=s=a=l=void 0,e.trim()},distance:function(t){if(!t)return 0;var e=this.call(),i=t.call?t.call():t,n=0;if(!e||!i)return 0;for(var r=0,s=e.length;s>r;++r)n+=(e[r]-i[r])*(e[r]-i[r]);return Math.sqrt(n)},setAdditive:function(t){if(!t)return 0;var e=this.$from.up();return e.string=t,this.additive=e.call()},setAccumulate:function(t){return!t||isNaN(t)?0:this.accumulate=this.numList.map(function(e){return e*t})}}).up("$to").from=null,base("$calcMode").mix({mode:"linear",keyTime:1,keySplines:null,_f:function(t){var e=this.keyTime;if(0===e&&t)t=0;else{if(!e||!isFinite(e))return this.string;t/=e,t=t>1?Math.floor(t):t}return e=void 0,isNaN(t)?this.string:this.to.advance(t)},funcForDiscrete:function(t){return isNaN(t)?this.string:1===t?this.to.string:this.to.advance(0)}}).of({norm:1,string:"",call:function(){var t=this._f.bind(this);if("linear"===this.mode)return this.to.call(),t;if("paced"===this.mode)return this.keyTime=this.to.distance(this.to.from)/this.norm,t;if("spline"===this.mode){var e=this.keySplines,i=function(t){return Math.PI};if(i.isNotAnimate=!0,!e)return i;for(var n=0,r=NaN;n<e.length;++n){if(r=e[n],isNaN(r))return i;if(0>r||r>1)return i}this.to.call();var s=e[0],a=e[1],l=e[2],h=e[3],o=1,u=1,m=o-3*(l-s),d=3*(l-2*s),f=3*s,c=u-3*(h-a),g=3*(h-2*a),v=3*a,p=Math.qubicnewton;if(!(0!==s&&1!==s||0!==a||1!==l&&0!==l||1!==h))return this.to.call(),t;var b=this.keyTime;return(b||isFinite(b))&&(m*=b,d*=b,f*=b,c*=b,g*=b,v*=b),b=e=s=a=l=h=o=u=void 0,function(e){var i=p(m,d,f,-e,e);return t(c*i*i*i+g*i*i+v*i)}}return"discrete"===this.mode?(this.to.call(),this.funcForDiscrete.bind(this)):void 0}}).to=base("$from").$to,Math.qubicnewton=function(t,e,i,n,r){var s=1e-15,a=t*r*r*r+e*r*r+i*r+n;if(0===a)return r;for(var l=0;100>l;l=l+1|0){var h=3*t*r*r+2*e*r+i;if(!h||s>a&&a>-s)return a=s=void 0,r;r-=a/h,a=t*r*r*r+e*r*r+i*r+n}return r},base("$calcMode").up("$attribute").mix({element:null,$from:base("$from").up(),attrName:"",attrNameSpace:null,defaultValue:"",isDefault:!1,isCSS:!1,mode:"linear",getAttr:function(t,e){var i=null;t.indexOf("xlink:")>-1&&(i="http://www.w3.org/1999/xlink");var n=this._ele.getAttributeNS(i,t);if(this.element){var r=this.element.ownerDocument.defaultView;if("inherit"===n)return r.getComputedStyle(this.element.parentNode,"").getPropertyValue(this.attrName);if("currentColor"===n)return r.getComputedStyle(this._ele,"").getPropertyValue("color")}return n||e},_ele:document.documentElement,hasAttrValues:function(){var t=this._ele;return t?t.hasAttribute("from")||t.hasAttribute("to")||t.hasAttribute("by")||t.hasAttribute("values"):!1},__cacheAttr:"",setAttribute:function(t){var e=this.attrName;if(e&&this.__cacheAttr!==t){this.__cacheAttr=t;var i=this.element;this.isCSS?i.style.setProperty(e,t,""):i.setAttributeNS(this.attrNameSpace,e,t),t=e=i=void 0}},removeAttribute:function(){var t=this.attrName;if(t){var e=this.element;this.isDefault?this.setAttribute(this.defaultValue):(e.removeAttributeNS(this.attrNameSpace,t),this.isCSS&&e.style.setProperty(t,this.defaultValue,"")),this.__cacheAttr="",value=t=e=void 0}},initTargetElement:function(){var t=this._ele,e=t.parentNode||null,i=t.getAttribute("xlink:href");return i?t.ownerDocument.getElementById(i.slice(1)):(i=t.getAttributeNS(null,"targetElement"))?t.ownerDocument.getElementById(i):e},_repeatList:[],_repeatCount:0,setSmilEvent:function(t){t.addEvent("begin",function(t){var e=this._ele,i=0,n=e.ownerDocument.createEvent("MouseEvents");n.initMouseEvent("beginEvent",!0,!0,window,i,0,0,0,0,!1,!1,!1,!1,0,e),e.dispatchEvent(n);var r=this._repeatList=[],s=t.activeTime,a=t.begin,l=this.timeline.simpleDuration;if(l&&l!==s&&s!==Number.MAX_VALUE)for(var h=l,o=1;s>h;h+=l)r.push({frame:a+h,count:o}),++o}.bind(this)),t.addEvent("play",function(t){var e=this._ele,i=0,n=t.currentFrame,r=this._repeatList;if(r.length)for(var s=0;s<r.length;++s){if(this._repaetCount>=s+1||r[s].frame>=n){this._repeatCount=i;break}i=r[s].count;var a=e.ownerDocument.createEvent("MouseEvents");a.initMouseEvent("repeatEvent",!0,!0,window,i,0,0,0,0,!1,!1,!1,!1,0,e),e.dispatchEvent(a)}}.bind(this)),t.addEvent("end",function(){var t=this._ele,e=0,i=t.ownerDocument.createEvent("MouseEvents");i.initMouseEvent("endEvent",!0,!0,window,e,0,0,0,0,!1,!1,!1,!1,0,t),t.dispatchEvent(i)}.bind(this))},push:function(t){if(!t||!t.hasAttribute)return null;if(this.__cacheAttr="",this._ele=t,this.element=this.initTargetElement(),!this.hasAttrValues())return null;this.attrName=this.getAttr("attributeName","");var e=this.attrName,i=this.getAttr("attributeType","auto"),n=this.element&&this.element.ownerDocument.defaultView.getComputedStyle(this.element,"");("CSS"===i||"auto"===i&&this.element&&n.getPropertyValue(e)&&!/^(width|height|transform)$/.test(e))&&(this.isCSS=!0),e.indexOf("xlink")>-1&&(this.attrNameSpace="http://www.w3.org/1999/xlink");var r=this.element;r&&(this._ele=r,this.isDefault=r.hasAttributeNS(this.attrNameSpace,e),this.defaultValue=this.getAttr(e,n.getPropertyValue(e)),this._ele=t);var s=base("$frame"),a=s.$begin,l=a.up().mix({target:t,eventTarget:this.element||a.eventTarget,string:this.getAttr("begin","0"),$activate:a.$activate.up().mix({dur:this.getAttr("dur",null),end:a.$end.up().mix({eventTarget:this.element||a.eventTarget,string:this.getAttr("end",null)}),repeatCount:this.getAttr("repeatCount",null),repeatDur:this.getAttr("repeatDur",null),min:this.getAttr("min","0"),max:this.getAttr("max","indefinite")})}).updateList().parse();s.addLine(l.$list.init());var h=l.$list.addList(Number.MAX_VALUE),o=l.$list.addEndList(Number.MAX_VALUE);t.beginElement="indefinite"!==l.string?function(){}:function(){h.value=l.begin=base("$frame").currentFrame,l.isResolved=!0;var t=this.ownerDocument.createEvent("MouseEvents");t.initMouseEvent("beginEvent",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,this),this.dispatchEvent(t)};var u=l.$activate.end||{};return t.endElement="indefinite"!==u.string?function(){}:function(){if(l.isResolved){u.isResolved=!0,o.value=base("$frame").currentFrame;var t=this.ownerDocument.createEvent("MouseEvents");t.initMouseEvent("endEvent",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,this),this.dispatchEvent(t)}},l.timelines=[],this.setSmilEvent(l.$list),a=t=void 0,l},setValues:function(t,e,i,n){var r=this.$from,s=[this.up().mix({to:r.up().mix({from:r.up()})})],a=s[0].to;if(t=t&&t.split(";"),t&&t.length){s=[];for(var l=1;l<t.length;++l)s.push(this.up().mix({to:r.up().mix({from:r.up()})})),a=s[s.length-1].to,a.string=t[l],a.from.string=t[l-1]}else if(i)a.string=i,a.from.string=e||"0";else{if(!n)return null;a.string=n,a.from.string=e||"0";for(var h=a.call(),o=a.from,l=0;l<h.length;++l)h[l]+=o[l]}return r=a=h=o=void 0,s},setKey:function(t){this._ele=t;var e,i,n=this.setValues(this.getAttr("values",null),this.getAttr("from",null),this.getAttr("to",null),this.getAttr("by",null)),r=this.getAttr("keyTimes",null),s=this.getAttr("keySplines",null),a=s&&s.split(";"),l="discrete"===this.mode;if(!l&&r&&n){if(e=this.$from.numList.call({string:r}),e.length&&0!==e[0])return null;if(e.length&&e.length!==n.length+1)return null;for(var h=0;h<n.length;++h)n[h].keyTime=e[h+1]-e[h],a&&(i=this.$from.numList.call({string:a[h]}),n[h].keySplines=i.length?i:null)}else if(!l&&n)for(var o=1/n.length,h=0;h<n.length;++h)n[h].keyTime=o,a&&(i=this.$from.numList.call({string:a[h]}),n[h].keySplines=i.length?i:null);else if(n){if(r){if(e=this.$from.numList.call({string:r}),e.length&&0!==e[0])return null;if(e.length&&e.length!==n.length+1)return null;for(var h=0;h<n.length;++h)n[h].keyTime=e[h+1]-e[h]}else for(var o=1/(n.length+1),h=0;h<n.length;++h)n[h].keyTime=o;n.push(n[n.length-1].up().mix(function(){e&&(this.keyTime=1-e[e.length-1])}).of({call:function(){return function(t){return isNaN(t)?this.string:this.to.advance(1)}.bind(this)}}))}if("paced"===this.mode){var u=0;n.forEach(function(t){u+=t.to.distance(t.to.from)}),n.forEach(function(t){t.norm=u})}return t=r=e=o=a=void 0,n}}).up("$setElement").mix({to:"",_setFrame:function(t){this.setAttribute(this.to)},timeline:base("$frame").$begin,_setEndFrame:function(t){"remove"===this.fill&&this.removeAttribute()},tocall:function(){},init:function(t){var e=this.push(t);t&&t.getAttributeNS&&(this._ele=t,this.to=this.getAttr("to",""),this.fill=this.getAttr("fill","remove"));var i=this.element;e&&i&&(this.timeline=e,e.$list.addEvent("begin",this._setFrame.bind(this)),e.$list.addEvent("play",this._setFrame.bind(this)),e.$list.addEvent("end",this._setEndFrame.bind(this)),e.$list.state=e.$list.WAITING),e=i=void 0}}).up("$animateElement").mix({funcs:[],tocall:function(t){var e=this.funcs;if("discrete"===this.mode){for(var i="",n=0;n<e.length;++n){var r=e[n];t>=r.startKeyTime&&(i=r(t))}return t=e=r=void 0,i}for(var n=0;n<e.length;++n){var r=e[n];if(r.endKeyTime>=t)return r(t-r.startKeyTime)}return e=n=r=void 0,""},_setFrame:function(t){var e=t.currentFrame,i=this.timeline,n=i.simpleDuration,r=n?(e-t.begin)%n/n:0;this.setAttribute(this.tocall(r)),i=n=r=void 0},getAdvanceEnd:function(t){var e=this.timeline,i=e.simpleDuration;if(i){var n=e.activeTime>t.beginEnd?t.beginEnd:e.activeTime,r=n%i/i;r=r>1?1:r,r=r||1}else r=0;return r},_setEndFrame:function(t){"freeze"===this.fill?(this.setAttribute(this.tocall(this.getAdvanceEnd(t))),line=duration=advance=void 0):this.removeAttribute()},getAttr:function(t,e){var i=this.$attribute.getAttr.apply(this,arguments);return"from"===t&&!i&&this.defaultValue?this.defaultValue:i},_keywords:{aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagree:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},setAdd:function(t,e){if("sum"===t.getAttributeNS(null,"additive")){var i=t.parentNode.getAttributeNS(null,this.attrName);t.addEventListener("beginEvent",function(t){e.forEach(function(t){t.to.setAdditive(i)})},!1)}},setAccum:function(t,e){"sum"===t.getAttributeNS(null,"accumulate")&&t.addEventListener("repeatEvent",function(t){e.forEach(function(e){e.to.call(),e.to.setAccumulate(t.detail)})},!1)},setString:function(){/^(?:display|class|edgeMode|(gradient|marker|pattern|maskContent|mask|patternContent|primitive)Units|in|in2|method|mode|operator|preserveAspectRatio|result|spacing|spreadMethod|stitchTiles|target|type|xlink:href|yChannelSelector|color-interpolation|(clip|fill)-rule|cursor|filter|font-(family|stretch|style|variant)|image-rendering|marker-(end|mid|start)|mask|overflow|pointer-events|shape-rendering|stroke-(linecap|linejoin)|text-(anchor|decoration|rendering)|visibility)$/.test(this.attrName)&&(this.mode="discrete")},degits:1,setValues:function(){var t=this.$attribute.setValues.apply(this,arguments),e=this.degits;return t&&t.forEach(function(t){t.to.degit=e}),e=void 0,t},toRGB:function(t){var e=this._keywords[t];if(e)return"rgb("+e.join(", ")+")";if(t&&"#"===t[0]){var i="rgb(",n=parseInt;if(t.length<5)var r=t[1],s=t[2],a=t[3],t="#"+r+r+s+s+a+a;return t.match(/\#(\w{2})(\w{2})(\w{2})/),i+=n(RegExp.$1,16)+", "+n(RegExp.$2,16)+", "+n(RegExp.$3,16)+")",r=s=a=void 0,i}return t}}).on("init",function(t){var e,i=0,n=function(t){return t},r=/^(?:fill|stroke|stop-color|color)$/.test(this.attrName);r&&(this.degits=0,n=this.toRGB.bind(this)),t&&(this.mode=t.getAttributeNS(null,"calcMode")||"linear",this.setString(),e=this.setKey(t)),e&&(this.funcs=e.map(function(t){t.to.string=n(t.to.string),t.to.from.string=n(t.to.from.string);var e=t.call();return e.startKeyTime=i,i=e.endKeyTime=i+t.keyTime,e}).filter(function(t){return this.timeline.isResolved?"spline"!==this.mode||!t.isNotAnimate:!0},this),this.setAdd(t,e),this.setAccum(t,e)),keywords=n=r=void 0}).up("$animateTransformElement").mix({numberOfList:-1,type:"translate",attrName:"transform",isCSS:!1,isSum:!1,degits:15,joinList:function(t){for(var e=this.element.__transformList,i=0;i<e.length;++i){var n=e[i],r=n.value;n.isSum?t+=" "+r:n.isPlaying&&(t=r)}return t.trim()},tocall:function(t){if(this.numberOfList<0)throw new Error("Number of The List Error");var e=this.element.__transformList[this.numberOfList];return e.value=this.type+"("+this.$animateElement.tocall.call(this,t)+")",e.isPlaying=!0,e.isSum=this.isSum,this.joinList(this.defaultValue||"")},__setAttribute:function(){},_setFrame:function(t){var e=(t.currentFrame,this.element.__transformList),i=!1,n=e.length;if(1!==n&&this.numberOfList<n-1)for(var r=this.numberOfList+1;n>r;++r)e[r].isPlaying&&(i=!0);this.setAttribute=i?this.__setAttribute:this.$animateElement.setAttribute,this.$animateElement._setFrame.call(this,t)},_setEndFrame:function(t){var e=this.element.__transformList;if(e){var i=e[this.numberOfList];if("remove"===this.fill){if(!i)return;this.isSum?i.value="translate(0)":i.isPlaying=!1}else i.value=this.type+"("+this.$animateElement.tocall.call(this,this.getAdvanceEnd(t))+")";this.setAttribute(this.joinList(this.defaultValue||"")),i=void 0}},setAdd:function(){}}).on("init",function(t){if(t&&t.parentNode){this.getAttr=this.$attribute.getAttr,this.type=this.getAttr("type","translate"),this.attrName="transform";var e=this.element;this.isDefault=e.hasAttributeNS(null,"transform"),this.defaultValue=e.getAttributeNS(null,"transform")||"",this.isSum="sum"===this.getAttr("additive","replace"),e.__transformList||(e.__transformList=[],this.numberOfList=-1),this.hasAttrValues()&&this.numberOfList<0&&(this.numberOfList=e.__transformList.length,e.__transformList.push({isPlaying:!1,value:"translate(0)",isSum:this.isSum}))}}).up("$motionElement").mix(function(){this._setFrame=this.$animateElement._setFrame,this._setEndFrame=this.$animateElement._setEndFrame}).mix({numberOfList:-1,mode:"paced",hasAttrValues:function(){return this.$attribute.hasAttrValues.call(this)?!0:this._ele.hasAttribute("path")||this._ele.getElementsByTagNameNS(this.path.namespaceURI,"mpath").length},path:document.createElementNS("http://www.w3.org/2000/svg","path"),rotate:"0",tocall:function(t){return("translate("+this.$animateElement.tocall.call(this,t)+") "+this.joinList(this.defaultValue||"")).trim()},getRotate:function(t,e,i){var n=t.getPathSegAtLength(e),r=t.pathSegList.getItem(n),s=r.pathSegTypeAsLetter,a=Math.PI;if("M"===s){var l=t.pathSegList.getItem(n+1),h=l.pathSegTypeAsLetter;if("M"===h)return"";if("L"===h)return") rotate("+(Math.atan2(l.y-r.y,l.x-r.x)/a*180+i);if("C"===h)return") rotate("+(Math.atan2(l.y1-r.y,l.x1-r.x)/a*180+i)}else{if("L"===s&&n-1>=0){var o=t.pathSegList.getItem(n-1);return") rotate("+(Math.atan2(r.y-o.y,r.x-o.x)/a*180+i)}if("C"===s){var u=t.getPointAtLength(e),m=u.x,d=u.y;return u=t.getPointAtLength(e+1),") rotate("+(Math.atan2(u.y-d,u.x-m)/a*180+i)}}},_tocallForPath:function(t){var e=this.path,i=t*e.getTotalLength(),n=e.getPointAtLength(i),r=0;return"0"===this.rotate?n.x+","+n.y:(r="auto"===this.rotate?0:"auto-reverse"===this.rotate?180:+this.rotate,n.x+","+n.y+this.getRotate(e,i,r))}}).on("init",function(t){if(t&&t.parentNode){this.type="translate",this.isSum=!0,this.mode=this.getAttr("mode","paced"),this.rotate=this.getAttr("rotate","0"),this.path=this.path.cloneNode(!0);var e=t.getElementsByTagNameNS(this.path.namespaceURI,"mpath"),i=this.$animateElement;if(e.length){var n=t.ownerDocument.getElementById(e[0].getAttributeNS("http://www.w3.org/1999/xlink","href").slice(1));n&&this.path.setAttributeNS(null,"d",n.getAttributeNS(null,"d")),this.$animateElement=i.up().mix({tocall:this._tocallForPath})}else t.hasAttributeNS(null,"path")&&(this.path.setAttributeNS(null,"d",t.getAttributeNS(null,"path")),this.$animateElement=i.up().mix({tocall:this._tocallForPath}))}}),window.addEventListener&&window.addEventListener("load",getDocument);
\ No newline at end of file
index 63e7f5b..0c89401 100644 (file)
Binary files a/sie.js.gz and b/sie.js.gz differ